MySQLの||演算子の優先順位はPIPES_AS_CONCAT SQLモードに依存するのか解説
MySQLでは、||演算子はデフォルトで論理OR演算子として動作します。しかし、その挙動はSQLモード「PIPES_AS_CONCAT」の設定によって変わる点に注意が必要です。このモードが有効になると、||演算子は文字列連結演算子として機能するようになり、その際の優先順位は^(ビット単位XOR)と単項演算子の間に位置づけられます。
デフォルトの動作:論理ORとして評価される
まず、2つの変数を設定して||演算子を使用してみましょう。
mysql> Set @C='tutorials'; Query OK, 0 rows affected (0.00 sec) mysql> Set @D='point'; Query OK, 0 rows affected (0.00 sec) mysql> Select @C||@D; +--------+ | @C||@D | +--------+ | 1 | +--------+ 1 row in set (0.00 sec)
上記の結果セットでは、出力が「1」(真)となっています。これは、||が論理OR演算子として機能し、両方のオペランドがNULLではないため、式全体が真と評価されたことを意味します。
PIPES_AS_CONCATモード有効時:文字列連結として動作
次に、PIPES_AS_CONCAT SQLモードを有効にしてみます。
mysql> Set SQL_MODE = 'PIPES_AS_CONCAT'; Query OK, 0 rows affected (0.10 sec)
このモードが有効になると、||演算子はCONCAT()関数、すなわち文字列連結関数のシノニム(別名)として動作するようになります。実際の実行結果は以下の通りです。
mysql> Select @C||@D; +----------------+ | @C||@D | +----------------+ | tutorialspoint | +----------------+ 1 row in set (0.00 sec)
ご覧のとおり、「tutorials」と「point」という2つの文字列が連結され、「tutorialspoint」という1つの文字列が出力されました。
まとめ
||演算子の動作と優先順位は、PIPES_AS_CONCAT SQLモードの状態に依存します。デフォルトでは論理OR演算子として扱われますが、モードを有効にするとCONCAT()関数と同等の文字列連結演算子として機能し、優先順位も^と単項演算子の間へと変化します。標準SQL準拠の挙動を求める場合は、このSQLモードの設定を確認しておくとよいでしょう。
-
SQL Serverの仮想化とは?仕組みと導入メリットを徹底解説
SQL Serverは、現代のITインフラにおいて仮想化に対応したソリューションのひとつです。本記事では、SQL Server仮想化の具体的な進め方と、どのようなケースで導入が有効なのかについて詳しく解説します。 画像出典:Pixabay SQL Server仮想化の基本 まず安心してほしいのは、SQL Serverの仮想化は、他の仮想化プロジェクトと基本的に同じ原理で動作するという点です。 従来のように1台のサーバーが特定のハードウェア一式を占有するのではなく、複数階層のソフトウェアを構築することで、ハードウェアリソースを複数の仮想サーバー間で共有できるようになります。 導入時のベストプラ
-
Discordストリーマーモードの設定方法を徹底解説
Discordは、複雑なチーム環境でプレイするゲーマー向けのチャットツールとして誕生しました。しかし現在では、用途はゲーマーにとどまらず、最も便利なコミュニケーションプラットフォームの一つとして幅広く活用されています。本記事では、Discordの「ストリーマーモード」の設定方法と、この機能について知っておくべきすべての情報をご紹介します。 Discordストリーマーモードとは? 市場には数多くの配信アプリやサービスが存在します。優れたものもありますが、高負荷なゲームを配信している最中にフリーズしてしまう製品も少なくありません。さらに、たとえ評判の良い配信ソフトでも、画面全体をそのまま配信してし