リテラル値
TiDB リテラル値には、文字リテラル、数値リテラル、時刻と日付リテラル、16 進数、バイナリ リテラル、および NULL リテラルが含まれます。このドキュメントでは、これらの各リテラル値について説明します。
このドキュメントでは、文字列リテラル、数値リテラル、NULL 値、16 進リテラル、日付と時刻リテラル、ブール値リテラル、およびビット値リテラルについて説明します。
文字列リテラル
文字列は、一重引用符'
または二重引用符"
で囲まれたバイトまたは文字のシーケンスです。例:
'example string'
"example string"
引用符で囲まれた文字列が隣り合って配置されている場合、それらは 1 つの文字列に連結されます。次の行は同等です。
'a string'
'a' ' ' 'string'
"a" ' ' "string"
ANSI_QUOTES
SQL モードが有効になっている場合、二重引用符で囲まれた文字列は識別子として解釈されるため、文字列リテラルは一重引用符で囲んでのみ引用できます。
文字列は次の 2 つのタイプに分かれています。
- バイナリ文字列: 文字セットと照合順序順序が両方とも
binary
であるバイトのシーケンスで構成され、比較の単位としてバイトを使用します。 - 非バイナリ文字列: 文字のシーケンスで構成され、
binary
以外のさまざまな文字セットと照合順序があります。非バイナリ文字列を比較する場合、文字を単位として使用します。文字セットによっては、文字に複数のバイトが含まれる場合があります。
文字列リテラルにはオプションのcharacter set introducer
とCOLLATE clause
があり、特定の文字セットと照合順序を使用する文字列として指定できます。
[_charset_name]'string' [COLLATE collation_name]
例えば:
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8'string' COLLATE utf8_bin;
N'literal' (または n'literal') を使用して、国別文字セットの文字列を作成できます。次のステートメントは同等です。
SELECT N'some text';
SELECT n'some text';
SELECT _utf8'some text';
文字列内の特殊文字を表すには、エスケープ文字を使用してエスケープします。
エスケープ文字 | 意味 |
---|---|
\0 | ASCII NUL (X'00') 文字 |
\' | 一重引用符' 文字 |
\" | 二重引用符" 文字 |
\b | バックスペース文字 |
\n | 改行文字 |
\r | 復帰文字 |
\t | タブ文字 |
\z | ASCII 26 (Ctrl + Z) |
\ | バックスラッシュ\ 文字 |
\% | % 文字 |
_ | _ 文字 |
'
で囲まれた文字列で"
表したり、 "
で囲まれた文字列で'
表したりする場合は、エスケープ文字を使用する必要はありません。
詳細についてはMySQL の文字列リテラル参照してください。
数値リテラル
数値リテラルには、整数リテラル、DECIMAL リテラル、浮動小数点リテラルが含まれます。
整数には小数点として.
含めることができます。数値の前に-
または+
を付けて、それぞれ負の値または正の値を示すことができます。
正確な値の数値リテラルは1, .2, 3.4, -5, -6.78, +9.10
として表すことができます。
数値リテラルは、 1.2E3, 1.2E-3, -1.2E3, -1.2E-3
などの科学的記数法で表すこともできます。
詳細についてはMySQL の数値リテラル参照してください。
日付と時刻のリテラル
日付と時刻のリテラル値は、引用符で囲まれた文字列や数値など、いくつかの形式で表すことができます。TiDB が日付を期待する場合、 '2017-08-24'
、 '20170824'
、 20170824
のいずれかを日付として解釈します。
TiDB は次の日付形式をサポートしています。
'YYYY-MM-DD'
または'YY-MM-DD'
: ここでの-
区切り文字は厳密ではありません。任意の句読点を使用できます。たとえば、'2017-08-24'
、'2017&08&24'
、'2012@12^31'
はすべて有効な日付形式です。唯一の特別な句読点は '.' で、これは整数部分と小数部分を区切る小数点として扱われます。日付と時刻はT
または空白で区切ることができます。たとえば、2017-8-24 10:42:00
と2017-8-24T10:42:00
同じ日付と時刻を表します。'YYYYMMDDHHMMSS'
または'YYMMDDHHMMSS'
: たとえば、'20170824104520'
と'170824104520'
は'2017-08-24 10:45:20'
とみなされます。ただし、'170824304520'
などの範囲外の値を指定した場合、有効な日付として扱われません。YYYYMMDD HHMMSS
、YYYYMMDD HH:MM:DD
、YYYY-MM-DD HHMMSS
などの不適切な形式は挿入に失敗することに注意してください。YYYYMMDDHHMMSS
またはYYMMDDHHMMSS
: これらの形式には一重引用符や二重引用符はなく、数字であることに注意してください。たとえば、20170824104520
'2017-08-24 10:45:20'
として解釈されます。
DATETIME または TIMESTAMP 値の後には、マイクロ秒の精度 (6 桁) を表すために使用される小数部が続きます。小数部は、常に小数点.
で残りの時間から区切られる必要があります。
2 桁のみの年の値はあいまいです。4 桁の年の形式を使用することをお勧めします。TiDB は、2 桁の年の値を次の規則に従って解釈します。
- 年値が
70-99
の範囲内にある場合は1970-1999
に変換されます。 - 年値が
00-69
の範囲内にある場合は2000-2069
に変換されます。
月または日が 10 未満の場合は、 '2017-8-4'
'2017-08-04'
と同じです。時間についても同様です。たとえば、 '2017-08-24 1:2:3'
は'2017-08-24 01:02:03'
と同じです。
日付または時刻の値が必要な場合、TiDB は値の長さに応じて指定された形式を選択します。
- 6桁:
YYMMDD
。 - 12桁:
YYMMDDHHMMSS
. - 8桁:
YYYYMMDD
。 - 14桁:
YYYYMMDDHHMMSS
.
TiDB は、時間値に対して次の形式をサポートしています。
'D HH:MM:SS'
、または'HH:MM:SS'
、'HH:MM'
、'D HH:MM'
、'D HH'
、'SS'
:D
日数を意味し、有効な値の範囲は0-34
です。HHMMSS
形式の数値: たとえば、231010
'23:10:10'
として解釈されます。SS
、MMSS
、HHMMSS
のいずれかの形式の数字は時間としてみなすことができます。
Time 型の小数点も.
で、小数点以下の精度は最大 6 桁です。
詳細はMySQL の日付と時刻のリテラル参照してください。
ブールリテラル
定数TRUE
とFALSE
それぞれ 1 と 0 に等しく、大文字と小文字は区別されません。
SELECT TRUE, true, tRuE, FALSE, FaLsE, false;
+------+------+------+-------+-------+-------+
| TRUE | true | tRuE | FALSE | FaLsE | false |
+------+------+------+-------+-------+-------+
| 1 | 1 | 1 | 0 | 0 | 0 |
+------+------+------+-------+-------+-------+
1 row in set (0.00 sec)
16進数リテラル
16 進リテラル値はX'val'
または0xval
表記法を使用して記述されます。5 val
は 16 進数字が含まれます。先頭の0x
大文字と小文字が区別され、 0X
と記述することはできません。
有効な 16 進数リテラル:
X'ac12'
X'12AC'
x'ac12'
x'12AC'
0xac12
0x12AC
不正な 16 進数リテラル:
X'1z' (z is not a hexadecimal legal digit)
0X12AC (0X must be written as 0x)
X'val'
表記法を使用して記述された 16 進数リテラルには、偶数桁が含まれている必要があります。 val
の長さが奇数 (たとえば、 X'A'
またはX'11A'
) の場合、構文エラーを回避するには、値の先頭にゼロを追加します。
mysql> select X'aff';
ERROR 1105 (HY000): line 0 column 13 near ""hex literal: invalid hexadecimal format, must even numbers, but 3 (total length 13)
mysql> select X'0aff';
+---------+
| X'0aff' |
+---------+
| 0x0aff |
+---------+
1 row in set (0.00 sec)
デフォルトでは、16 進リテラルはバイナリ文字列です。
文字列または数値を 16 進形式の文字列に変換するには、 HEX()
関数を使用します。
mysql> SELECT HEX('TiDB');
+-------------+
| HEX('TiDB') |
+-------------+
| 54694442 |
+-------------+
1 row in set (0.01 sec)
mysql> SELECT X'54694442';
+-------------+
| X'54694442' |
+-------------+
| TiDB |
+-------------+
1 row in set (0.00 sec)
ビット値リテラル
ビット値リテラルは、 b'val'
または0bval
表記法を使用して記述されます。 val
は、 0 と 1 を使用して記述されたバイナリ値です。先頭の0b
大文字と小文字が区別され、 0B
と記述することはできません。
有効なビット値リテラル:
b'01'
B'01'
0b01
不正なビット値リテラル:
b'2' (2 is not a binary digit; it must be 0 or 1)
0B01 (0B must be written as 0b)
デフォルトでは、ビット値リテラルはバイナリ文字列です。
ビット値はバイナリ値として返されるため、MySQL クライアントでは適切に表示されない可能性があります。ビット値を印刷可能な形式に変換するには、 BIN()
やHEX()
などの変換関数を使用できます。
CREATE TABLE t (b BIT(8));
INSERT INTO t SET b = b'00010011';
INSERT INTO t SET b = b'1110';
INSERT INTO t SET b = b'100101';
mysql> SELECT b+0, BIN(b), HEX(b) FROM t;
+------+--------+--------+
| b+0 | BIN(b) | HEX(b) |
+------+--------+--------+
| 19 | 10011 | 13 |
| 14 | 1110 | E |
| 37 | 100101 | 25 |
+------+--------+--------+
3 rows in set (0.00 sec)
NULL値
NULL
データが空であることを意味し、大文字と小文字は区別されません。これは\N
(大文字と小文字を区別する) と同義です。
注記:
NULL
は0
と同じではなく、空の文字列''
とも異なります。