MySQLには、日名または月名を返す特定の日付関数があります。特に、DATE_FORMAT()
を参照しています 、DAYNAME()
、およびMONTHNAME()
関数。これらは、たとえば11月の値を返す場合があります 、または月曜日 、使用されているクエリによって異なります。ただし、必要に応じて、結果を別の言語で簡単に返すことができます。
これらの関数が戻り値に使用する言語は、lc_time_names
から派生しています。 システム変数。この変数の値を表示するか、そのSESSION
を設定できます これらの関数の結果が目的の言語/ロケールになるように値を設定します。
ロケール名には、Internet Assigned Numbers Authority(IANA)によってリストされた言語と地域のサブタグがあります。例には、en_US
が含まれます 英語–米国 、en_NZ
英語–ニュージーランド 、またはes_PA
スペイン語–パナマ 、など(MySQLでサポートされているロケールのリストについては、MySQLのロケールの完全なリストを参照してください)。
この記事では、接続の現在のロケールを見つけて変更し、それがクエリの結果にどのように影響するかを確認する方法を説明します。この設定の影響を受けない関数も示します(ただし、この関数を使用するとロケールを指定できます)。
現在のロケールを表示
まず、lc_time_names
の現在の値を見てみましょう。 システム変数。
SELECT @@lc_time_names;
結果:
+-----------------+ | @@lc_time_names | +-----------------+ | en_US | +-----------------+
したがって、現在のロケールはen_US
です。 。これは、システムのロケール設定に関係なく、実際にはデフォルト値です(ただし、これはサーバーの起動時、またはGLOBAL
を設定することで変更できます。 値)。
ロケールを変更する
それでは、ロケールを変更して結果を表示しましょう。
SET lc_time_names = 'de_BE'; SELECT @@lc_time_names;
結果:
+-----------------+ | @@lc_time_names | +-----------------+ | de_BE | +-----------------+
この場合、ロケールをde_BE
に変更しました 、ドイツ語–ベルギー 。
使用例
ロケールを設定してから、月の名前を返すクエリを実行する例を次に示します。次に、ロケールを別の値に設定してから、同じクエリを再度実行します。
第1ロケール:英語–米国
SET lc_time_names = 'en_US'; SELECT MONTHNAME('1999-10-03');
結果:
+-------------------------+ | MONTHNAME('1999-10-03') | +-------------------------+ | October | +-------------------------+
2番目のロケール:スペイン語–スペイン
SET lc_time_names = 'es_ES'; SELECT MONTHNAME('1999-10-03');
結果:
+-------------------------+ | MONTHNAME('1999-10-03') | +-------------------------+ | October | +-------------------------+
FORMAT()関数
lc_time_names
の値 FORMAT()
には影響しません 関数ですが、この関数は、ロケールを指定できる3番目の引数を受け入れます。これが私の言いたいことの例です。
SET lc_time_names = 'de_DE'; SELECT FORMAT(1234, 0), FORMAT(1234, 0, 'de_DE');
結果:
+-----------------+--------------------------+ | FORMAT(1234, 0) | FORMAT(1234, 0, 'de_DE') | +-----------------+--------------------------+ | 1,234 | 1.234 | +-----------------+--------------------------+
したがって、lc_time_names
を設定したとしても de_DE
へ まず、FORMAT()
の最初の呼び出し それを無視した。 2回目に関数を呼び出したときに、3番目の引数と同じ言語/ロケールを明示的に指定したところ、機能しました。