キャスト関数および演算子を使用すると、あるデータ型から別のデータ型に値を変換できます。
USING
句を含む CONVERT()
は、文字セット間でデータを変換します:
CONVERT(expr USING transcoding_name)
MySQL では、トランスコーディング名は対応する文字セット名と同じです。
例:
SELECT CONVERT('test' USING utf8mb4);
SELECT CONVERT(_latin1'Müller' USING utf8mb4);
INSERT INTO utf8mb4_table (utf8mb4_column)
SELECT CONVERT(latin1_column USING utf8mb4) FROM latin1_table;
文字セット間で文字列を変換するには、CONVERT(
構文 (expr
, type
)USING
なし) または CAST(
も使用できます。これは同等です:
expr
AS type
)
CONVERT(string, CHAR[(N)] CHARACTER SET charset_name)
CAST(string AS CHAR[(N)] CHARACTER SET charset_name)
例:
SELECT CONVERT('test', CHAR CHARACTER SET utf8mb4);
SELECT CAST('test' AS CHAR CHARACTER SET utf8mb4);
前述のように CHARACTER SET
を指定した場合、結果の文字セットと照合順序は charset_name
charset_name
および charset_name
のデフォルト照合順序になります。 CHARACTER SET
を省略すると、結果の文字セットおよび照合順序は、デフォルトの接続文字セットおよび照合順序を決定する charset_name
character_set_connection
および collation_connection
システム変数によって定義されます (セクション10.4「接続文字セットおよび照合順序」 を参照)。
COLLATE
句は、CONVERT()
または CAST()
コール内では許可されませんが、関数の結果に適用できます。 たとえば、次の場合は有効です。
SELECT CONVERT('test' USING utf8mb4) COLLATE utf8mb4_bin;
SELECT CONVERT('test', CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_bin;
SELECT CAST('test' AS CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_bin;
ただし、これらは不正です:
SELECT CONVERT('test' USING utf8mb4 COLLATE utf8mb4_bin);
SELECT CONVERT('test', CHAR CHARACTER SET utf8mb4 COLLATE utf8mb4_bin);
SELECT CAST('test' AS CHAR CHARACTER SET utf8mb4 COLLATE utf8mb4_bin);
通常、BLOB
値またはその他のバイナリ文字列は、大文字と小文字を区別しない方法で比較できません。バイナリ文字列では、大文字と小文字の概念と照合されない binary
文字セットが使用されるためです。 大/小文字を区別しない比較を実行するには、まず CONVERT()
または CAST()
関数を使用して、値を非バイナリ文字列に変換します。 結果の文字列の比較では、その照合が使用されます。 たとえば、変換結果の照合で大/小文字が区別されない場合、LIKE
操作では大/小文字は区別されません。 これは、デフォルトの utf8mb4
照合 (utf8mb4_0900_ai_ci
) では大/小文字が区別されないため、次の操作に当てはまります:
SELECT 'A' LIKE CONVERT(blob_col USING utf8mb4)
FROM tbl_name;
変換された文字列に特定の照合順序を指定するには、CONVERT()
コールの後に COLLATE
句を使用します:
SELECT 'A' LIKE CONVERT(blob_col USING utf8mb4) COLLATE utf8mb4_unicode_ci
FROM tbl_name;
別の文字セットを使用するには、前述のステートメントで utf8mb4
の名前を置き換えます (別の照合順序を使用する場合と同様です)。
CONVERT()
および CAST()
は、異なる文字セットで表される文字列を比較するために、より一般的に使用できます。 たとえば、これらの文字列を比較すると、文字セットが異なるためエラーになります:
mysql> SET @s1 = _latin1 'abc', @s2 = _latin2 'abc';
mysql> SELECT @s1 = @s2;
ERROR 1267 (HY000): Illegal mix of collations (latin1_swedish_ci,IMPLICIT)
and (latin2_general_ci,IMPLICIT) for operation '='
いずれかの文字列を他の文字セットと互換性のある文字セットに変換すると、エラーなしで比較を実行できます:
mysql> SELECT @s1 = CONVERT(@s2 USING latin1);
+---------------------------------+
| @s1 = CONVERT(@s2 USING latin1) |
+---------------------------------+
| 1 |
+---------------------------------+
文字列リテラルの場合、文字セットを指定する別の方法は、文字セットイントロデューサを使用することです。前述の例の_latin1
および_latin2
は、イントロデューサのインスタンスです。 文字列をある文字セットから別の文字セットに変換する CAST()
や CONVERT()
などの変換関数とは異なり、イントロデューサは文字列リテラルを特定の文字セットを持つものとして指定し、変換は必要ありません。 詳細は、セクション10.3.8「文字セットイントロデューサ」を参照してください。
文字セット変換は、バイナリ文字列の大文字と小文字の変換の前にも役立ちます。 LOWER()
および UPPER()
は、大文字と小文字の概念が適用されないため、バイナリ文字列に直接適用すると無効になります。 バイナリ文字列の大文字と小文字の変換を実行するには、まず文字列に格納されているデータに適した文字セットを使用して、非バイナリ文字列に変換します:
mysql> SET @str = BINARY 'New York';
mysql> SELECT LOWER(@str), LOWER(CONVERT(@str USING utf8mb4));
+-------------+------------------------------------+
| LOWER(@str) | LOWER(CONVERT(@str USING utf8mb4)) |
+-------------+------------------------------------+
| New York | new york |
+-------------+------------------------------------+
BINARY
、CAST()
または CONVERT()
を使用してインデックス付けされたカラムを変換すると、MySQL でインデックスを効率的に使用できない場合があることに注意してください。
キャスト関数は、CREATE TABLE ... SELECT
ステートメントで特定の型のカラムを作成する場合に役立ちます:
mysql> CREATE TABLE new_table SELECT CAST('2000-01-01' AS DATE) AS c1;
mysql> SHOW CREATE TABLE new_table\G
*************************** 1. row ***************************
Table: new_table
Create Table: CREATE TABLE `new_table` (
`c1` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
キャスト関数は、ENUM
カラムを字句順にソートする場合に役立ちます。 通常、ENUM
カラムのソートは、内部数値を使用して実行されます。 値を CHAR
にキャストすると、語彙順にソートされます。
SELECT enum_col FROM tbl_name ORDER BY CAST(enum_col AS CHAR);
CONCAT('Date: ',CAST(NOW() AS DATE))
のように、より複雑な式の一部として使用する場合でも、CAST()
の結果が変わります。
時間値の場合、CAST()
を使用して様々な形式でデータを抽出する必要はほとんどありません。 かわりに、EXTRACT()
、DATE_FORMAT()
、TIME_FORMAT()
などの関数を使用してください。 セクション12.7「日付および時間関数」を参照してください。
文字列を数値にキャストするには、通常、数値コンテキストで文字列値を使用するだけで十分です:
mysql> SELECT 1+'1';
-> 2
これは、16 進数リテラルおよびビットリテラル (デフォルトではバイナリ文字列) にも当てはまります:
mysql> SELECT X'41', X'41'+0;
-> 'A', 65
mysql> SELECT b'1100001', b'1100001'+0;
-> 'a', 97
算術演算で使用される文字列は、式の評価時に浮動小数点数に変換されます。
文字列コンテキストで使用される数値は文字列に変換されます:
mysql> SELECT CONCAT('hello you ',2);
-> 'hello you 2'
数字から文字列への暗黙的な変換については、セクション12.3「式評価での型変換」を参照してください。
MySQL では、符号付きと符号なしの両方の 64 ビット値を使用した演算がサポートされています。 オペランドのいずれかが符号なし整数である数値演算子 (+
や -
など) の場合、結果はデフォルトで符号なしになります (セクション12.6.1「算術演算子」 を参照)。 これをオーバーライドするには、SIGNED
または UNSIGNED
キャスト演算子を使用して、それぞれ符号付きまたは符号なし 64 ビット整数に値をキャストします。
mysql> SELECT 1 - 2;
-> -1
mysql> SELECT CAST(1 - 2 AS UNSIGNED);
-> 18446744073709551615
mysql> SELECT CAST(CAST(1 - 2 AS UNSIGNED) AS SIGNED);
-> -1
オペランドのいずれかが浮動小数点値である場合は、結果が浮動小数点値になり、上記のルールによる影響を受けません。 (このコンテキストでは、DECIMAL
カラム値は浮動小数点値とみなされます。)
mysql> SELECT CAST(1 AS UNSIGNED) - 2.0;
-> -1.0
SQL モードは、変換操作の結果に影響します (セクション5.1.11「サーバー SQL モード」 を参照)。 例:
「「ゼロ」」の日付文字列を日付に変換する場合、
CONVERT()
およびCAST()
はNULL
を返し、NO_ZERO_DATE
SQL モードが有効なときに警告を生成します。整数の減算では、
NO_UNSIGNED_SUBTRACTION
SQL モードが有効になっている場合は、オペランドのいずれかが符号なしでも、結果が符号付きになります。
次のリストでは、使用可能なキャスト関数および演算子について説明します:
-
BINARY
expr
BINARY
演算子は、式をバイナリ文字列 (binary
文字セットおよびbinary
照合順序を持つ文字列) に変換します。BINARY
の一般的な用途は、文字単位ではなく数値バイト値を使用して、文字列をバイト単位で強制的に比較することです。BINARY
演算子を使用すると、比較の末尾の空白も意味を持ちます。binary
文字セットのbinary
照合順序と非バイナリ文字セットの_bin
照合順序の違いについては、セクション10.8.5「バイナリ照合順序と_bin 照合順序」 を参照してください。mysql> SELECT 'a' = 'A'; -> 1 mysql> SELECT BINARY 'a' = 'A'; -> 0 mysql> SELECT 'a' = 'a '; -> 1 mysql> SELECT BINARY 'a' = 'a '; -> 0
比較時に、
BINARY
によって演算全体が影響を受けます。これは、同じ結果を持ついずれかのオペランドの前に指定できます。文字列式をバイナリ文字列に変換する場合、次の構造体は同等です:
CAST(expr AS BINARY) CONVERT(expr USING BINARY) BINARY expr
値が文字列リテラルの場合は、
_binary
文字セットイントロデューサを使用して、変換せずにバイナリ文字列として指定できます:mysql> SELECT 'a' = 'A'; -> 1 mysql> SELECT _binary 'a' = 'A'; -> 0
イントロデューサについては、セクション10.3.8「文字セットイントロデューサ」 を参照してください。
式の
BINARY
演算子は、文字カラム定義のBINARY
属性とは異なります。BINARY
属性で定義された文字列の場合、MySQL は、テーブルのデフォルトの文字セットと、その文字セットのバイナリ (_bin
) 照合順序を割り当てます。 すべての非バイナリ文字セットには、_bin
照合順序があります。 たとえば、テーブルのデフォルトの文字セットがutf8mb4
の場合、次の 2 つのカラム定義は同等です:CHAR(10) BINARY CHAR(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
CHAR
、VARCHAR
またはTEXT
カラムの定義でCHARACTER SET binary
を使用すると、カラムは対応するバイナリ文字列データ型として扱われます。 たとえば、次のペアになった定義は同等です。CHAR(10) CHARACTER SET binary BINARY(10) VARCHAR(10) CHARACTER SET binary VARBINARY(10) TEXT CHARACTER SET binary BLOB
-
CAST(
expr
AStype
[ARRAY])CAST(
timestamp_value
AT TIME ZONEtimezone_specifier
AS DATETIME[(precision
)])timezone_specifier
: [INTERVAL] '+00:00' | 'UTC'CAST()
関数は、任意の型の式を受け取り、CONVERT()
と同様に、指定された型の結果値を生成します。 詳細は、CONVERT()
の説明を参照してください。MySQL 8.0.17 以上では、
InnoDB
を使用して、CREATE INDEX
、CREATE TABLE
およびALTER TABLE
ステートメントの一部として追加ARRAY
キーワードを使用して、JSON
配列に複数値インデックスを作成できます。 これらのステートメントのいずれかで複数値インデックスを作成するために使用する場合を除き、ARRAY
はサポートされていません。この場合は、複数値インデックスが必要です。 インデックス付けするカラムは、JSON
型のカラムである必要があります。ARRAY
では、AS
キーワードの後に続くtype
は、BINARY
、JSON
およびYEAR
を除き、CAST()
でサポートされている任意のタイプを指定できます。 構文情報と例、およびその他の関連情報については、複数値インデックス を参照してください。注記CAST()
とは異なり、CONVERT()
では複数値インデックスの作成またはARRAY
キーワードはサポートされていません。MySQL 8.0.22 以降、
CAST()
ではAT TIMEZONE
演算子を使用した UTC としてのTIMESTAMP
値の取得がサポートされています。 サポートされているタイムゾーンは UTC のみです。これは、'+00:00'
または'UTC'
のいずれかとして指定できます。 この構文でサポートされている唯一の戻り型はDATETIME
で、0 から 6 の範囲のオプションの精度指定子があります。タイムゾーンオフセットを使用する
TIMESTAMP
値もサポートされています。mysql> SELECT @@system_time_zone; +--------------------+ | @@system_time_zone | +--------------------+ | EDT | +--------------------+ 1 row in set (0.00 sec) mysql> CREATE TABLE TZ (c TIMESTAMP); Query OK, 0 rows affected (0.41 sec) mysql> INSERT INTO tz VALUES > ROW(CURRENT_TIMESTAMP), > ROW('2020-07-28 14:50:15+1:00'); Query OK, 1 row affected (0.08 sec) mysql> TABLE tz; +---------------------+ | c | +---------------------+ | 2020-07-28 09:22:41 | | 2020-07-28 09:50:15 | +---------------------+ 2 rows in set (0.00 sec) mysql> SELECT CAST(c AT TIME ZONE '+00:00' AS DATETIME) AS u FROM tz; +---------------------+ | u | +---------------------+ | 2020-07-28 13:22:41 | | 2020-07-28 13:50:15 | +---------------------+ 2 rows in set (0.00 sec) mysql> SELECT CAST(c AT TIME ZONE 'UTC' AS DATETIME(2)) AS u FROM tz; +------------------------+ | u | +------------------------+ | 2020-07-28 13:22:41.00 | | 2020-07-28 13:50:15.00 | +------------------------+ 2 rows in set (0.00 sec)
この形式の
CAST()
で'UTC'
をタイムゾーン指定子として使用し、サーバーで「不明または不正なタイムゾーン: 'UTC'」などのエラーが発生した場合は、MySQL タイムゾーンテーブルのインストールが必要になることがあります (タイムゾーンテーブルへの移入 を参照)。AT TIME ZONE
ではARRAY
キーワードはサポートされておらず、CONVERT()
関数ではサポートされていません。 -
CONVERT(
,expr
USINGtranscoding_name
)CONVERT(
expr
,type
)CONVERT()
関数は、任意の型の式を受け取り、指定された型の結果値を生成します。CONVERT(... USING ...)
は標準の SQL 構文です。USING
形式以外のCONVERT()
は ODBC の構文です。CONVERT(
は、異なる文字セット間でデータを変換します。 MySQL では、トランスコーディング名は対応する文字セット名と同じです。 たとえば、次のステートメントは、デフォルト文字セットの文字列expr
USINGtranscoding_name
)'abc'
をutf8mb4
文字セットの対応する文字列に変換します:SELECT CONVERT('abc' USING utf8mb4);
CONVERT(
構文 (expr
,type
)USING
を使用しない) では、結果タイプを指定する式およびtype
値を使用します。 この操作は、同等のCAST(
として表現することもできます。 次のexpr
AStype
)type
値を使用できます:-
BINARY[(
N
)]BINARY
データ型の文字列を生成します。 これが比較に与える影響の詳細は、セクション11.3.3「BINARY および VARBINARY 型」 を参照してください。 オプションの長さN
が指定されている場合に、BINARY(
を使用すると、キャストでN
)N
バイトの引数しか使用されなくなります。 値がN
バイトよりも短い場合は、N
の長さになるまで0x00
バイトでパディングされます。 -
CHAR[(
N
)] [charset_info
]CHAR
データ型の文字列を生成します。 オプションの長さのN
が指定されている場合、CHAR(
はキャストで引数のN
)N
文字以下を使用します。N
文字より短い値にはパディングは行われません。charset_info
句を指定しない場合、CHAR
はデフォルトの文字セットを使用して文字列を生成します。 文字セットを明示的に指定するには、次のcharset_info
値を使用できます:CHARACTER SET
: 指定された文字セットを持つ文字列を生成します。charset_name
ASCII
:CHARACTER SET latin1
の短縮形。UNICODE
:CHARACTER SET ucs2
の短縮形。
いずれの場合も、文字列にはデフォルトの照合順序が設定されます。
-
DATE
DATE
値を生成します。 -
DATETIME
DATETIME
値を生成します。 -
DECIMAL[(
M
[,D
])]DECIMAL
値を生成します。 オプションのM
およびD
値が指定されている場合は、小数点以下の最大桁数 (精度) と桁数 (スケール) を指定します。 -
DOUBLE
DOUBLE
結果を生成します。 MySQL 8.0.17 で追加されました。 -
FLOAT[(
p
)]精度
p
が指定されていない場合、FLOAT
型の結果が生成されます。p
が指定され、0 <= <p
<= 24 の場合、結果のタイプはFLOAT
になります。 25 <=p
<= 53 の場合、結果のタイプはDOUBLE
です。p
< 0 またはp
> 53 の場合、エラーが返されます。 MySQL 8.0.17 で追加されました。 -
JSON
JSON
値を生成します。JSON
と他のタイプ間の値変換のルールの詳細は、JSON 値の比較および順序付け を参照してください。 -
NCHAR[(
N
)]CHAR
と似ていますが、各国語文字セットの文字列を生成します。 セクション10.3.7「各国語文字セット」を参照してください。CHAR
とは異なり、NCHAR
では後続の文字セット情報を指定できません。 -
REAL
REAL
タイプの結果を生成します。REAL_AS_FLOAT
SQL モードが有効な場合、これは実際にはFLOAT
です。それ以外の場合、結果のタイプはDOUBLE
になります。 -
SIGNED [INTEGER]
符号付き整数値を生成します。
-
spatial_type
MySQL 8.0.24 では、
CAST()
およびCONVERT()
は、空間型の特定の組合せに対して、ある空間型から別の空間型へのジオメトリ値のキャストをサポートしています。 次のリストに、許可されているタイプの組合せを示します。ここで、「MySQL 拡張機能」は、SQL/MM standard で定義されているもの以外に、MySQL で実装されているキャストを指定します:-
Point
から次の操作を行います:MultiPoint
GeometryCollection
-
LineString
から次の操作を行います:Polygon
(MySQL 拡張機能)MultiPoint
(MySQL 拡張機能)MultiLineString
GeometryCollection
-
Polygon
から次の操作を行います:LineString
(MySQL 拡張機能)MultiLineString
(MySQL 拡張機能)MultiPolygon
GeometryCollection
-
MultiPoint
から次の操作を行います:Point
LineString
(MySQL 拡張機能)GeometryCollection
-
MultiLineString
から次の操作を行います:LineString
Polygon
(MySQL 拡張機能)MultiPolygon
(MySQL 拡張機能)GeometryCollection
-
MultiPolygon
から次の操作を行います:Polygon
MultiLineString
(MySQL 拡張機能)GeometryCollection
-
GeometryCollection
から次の操作を行います:Point
LineString
Polygon
MultiPoint
MultiLineString
MultiPolygon
空間キャストでは、
GeometryCollection
とGeomCollection
は同じ結果タイプのシノニムです。一部の条件はすべての空間型キャストに適用され、一部の条件はキャスト結果が特定の空間型を持つ場合にのみ適用されます。 「「整形式のジオメトリ、」」などの用語の詳細は、セクション11.4.4「ジオメトリの整形式と妥当性」 を参照してください。
空間キャストの一般的な条件
次の条件は、結果の型に関係なく、すべての空間キャストに適用されます:
キャストの結果は、キャストする式の SRS と同じ SRS になります。
空間型間のキャストでは、座標値または順序は変更されません。
キャストする式が
NULL
の場合、関数の結果はNULL
です。空間型を指定する
RETURNING
句とともにJSON_VALUE()
関数を使用して空間型にキャストすることはできません。空間型の
ARRAY
へのキャストは許可されません。空間型の組合せが許可されているが、キャストする式が構文的に整形式のジオメトリでない場合は、
ER_GIS_INVALID_DATA
エラーが発生します。空間型の組合せが許可されているが、キャストする式が未定義の空間参照システム (SRS) 内の構文的に整形されたジオメトリである場合、
ER_SRS_NOT_FOUND
エラーが発生します。-
キャストする式に地理 SRS があり、経度または緯度が範囲外の場合は、エラーが発生します:
経度の値が (−180, 180]の範囲にない場合は、
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
エラーが発生します。緯度の値が[−90, 90]の範囲にない場合は、
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
エラーが発生します。
表示される範囲は度数です。 SRS で別の単位が使用されている場合、範囲ではその単位に対応する値が使用されます。 浮動小数点演算のため、正確な範囲制限はわずかに偏差します。
ポイントへのキャストの条件
キャスト結果タイプが
Point
の場合は、次の条件が適用されます:キャストする式が
Point
型の整形式ジオメトリである場合、関数の結果はそのPoint
になります。キャストする式が単一の
Point
を含むMultiPoint
型の整形式ジオメトリである場合、関数の結果はそのPoint
になります。 式に複数のPoint
が含まれている場合、ER_INVALID_CAST_TO_GEOMETRY
エラーが発生します。キャストする式が、単一の
Point
のみを含むGeometryCollection
型の整形式ジオメトリである場合、関数の結果はそのPoint
になります。 式が空の場合、複数のPoint
が含まれている場合、または他のジオメトリタイプが含まれている場合は、ER_INVALID_CAST_TO_GEOMETRY
エラーが発生します。キャストする式が
Point
,MultiPoint
,GeometryCollection
以外の型の整形式ジオメトリである場合、ER_INVALID_CAST_TO_GEOMETRY
エラーが発生します。
LineString へのキャストの条件
キャスト結果タイプが
LineString
の場合は、次の条件が適用されます:キャストする式が
LineString
型の整形式ジオメトリである場合、関数の結果はそのLineString
になります。キャストする式が、内部リングを持たない
Polygon
型の整形式ジオメトリである場合、関数の結果は、外部リングの点を同じ順序で含むLineString
になります。 式に内部リングがある場合は、ER_INVALID_CAST_TO_GEOMETRY
エラーが発生します。キャストする式が、少なくとも 2 つの点を含む
MultiPoint
型の整形式ジオメトリである場合、関数の結果は、式に出現する順序でMultiPoint
の点を含むLineString
になります。 式にPoint
が 1 つしか含まれていない場合、ER_INVALID_CAST_TO_GEOMETRY
エラーが発生します。キャストする式が単一の
LineString
を含むMultiLineString
型の整形式ジオメトリである場合、関数の結果はそのLineString
になります。 式に複数のLineString
が含まれている場合、ER_INVALID_CAST_TO_GEOMETRY
エラーが発生します。キャストする式が、単一の
LineString
のみを含むGeometryCollection
型の整形式ジオメトリである場合、関数の結果はそのLineString
になります。 式が空の場合、複数のLineString
が含まれている場合、または他のジオメトリタイプが含まれている場合は、ER_INVALID_CAST_TO_GEOMETRY
エラーが発生します。キャストする式が
LineString
,Polygon
,MultiPoint
,MultiLineString
またはGeometryCollection
以外の型の整形式ジオメトリである場合、ER_INVALID_CAST_TO_GEOMETRY
エラーが発生します。
ポリゴンへのキャストの条件
キャスト結果タイプが
Polygon
の場合は、次の条件が適用されます:キャストする式がリングである (つまり、開始点と終了点が同じである)
LineString
型の整形式ジオメトリである場合、関数の結果は、同じ順序のLineString
の点で構成される外部リングを持つPolygon
になります。 式がリングでない場合は、ER_INVALID_CAST_TO_GEOMETRY
エラーが発生します。 リングの順序が正しくない場合 (外側のリングは反時計回りである必要があります)、ER_INVALID_CAST_POLYGON_RING_DIRECTION
エラーが発生します。キャストする式が
Polygon
型の整形式ジオメトリである場合、関数の結果はそのPolygon
になります。キャストする式が、すべての要素がリングである
MultiLineString
型の整形式ジオメトリである場合、関数の結果は、最初のLineString
が外側のリングとして、追加のLineString
値が内側のリングとして含まれるPolygon
になります。 式のいずれかの要素がリングでない場合は、ER_INVALID_CAST_TO_GEOMETRY
エラーが発生します。 正しい順序でないリングがある場合 (外側のリングは反時計回り、内側のリングは時計回りである必要があります)、ER_INVALID_CAST_POLYGON_RING_DIRECTION
エラーが発生します。キャストする式が単一の
Polygon
を含むMultiPolygon
型の整形式ジオメトリである場合、関数の結果はそのPolygon
になります。 式に複数のPolygon
が含まれている場合、ER_INVALID_CAST_TO_GEOMETRY
エラーが発生します。キャストする式が、単一の
Polygon
のみを含むGeometryCollection
型の整形式ジオメトリである場合、関数の結果はそのPolygon
になります。 式が空の場合、複数のPolygon
が含まれている場合、または他のジオメトリタイプが含まれている場合は、ER_INVALID_CAST_TO_GEOMETRY
エラーが発生します。キャストする式が
LineString
,Polygon
,MultiLineString
,MultiPolygon
またはGeometryCollection
以外の型の整形式ジオメトリである場合、ER_INVALID_CAST_TO_GEOMETRY
エラーが発生します。
MultiPoint へのキャストの条件
キャスト結果タイプが
MultiPoint
の場合は、次の条件が適用されます:キャストする式が
Point
型の整形式のジオメトリである場合、関数の結果はそのPoint
を唯一の要素として含むMultiPoint
になります。キャストする式が
LineString
型の整形式ジオメトリである場合、関数の結果はLineString
の点を同じ順序で含むMultiPoint
になります。キャストする式が
MultiPoint
型の整形式ジオメトリである場合、関数の結果はそのMultiPoint
になります。キャストする式が、点のみを含む
GeometryCollection
型の整形式ジオメトリである場合、関数の結果はこれらの点を含むMultiPoint
になります。GeometryCollection
が空であるか、他のジオメトリタイプが含まれている場合、ER_INVALID_CAST_TO_GEOMETRY
エラーが発生します。キャストする式が
Point
,LineString
,MultiPoint
またはGeometryCollection
以外の型の整形式ジオメトリである場合、ER_INVALID_CAST_TO_GEOMETRY
エラーが発生します。
MultiLineString へのキャストの条件
キャスト結果タイプが
MultiLineString
の場合は、次の条件が適用されます:キャストする式が
LineString
型の整形式のジオメトリである場合、関数の結果はそのLineString
を唯一の要素として含むMultiLineString
になります。キャストする式が
Polygon
型の整形式ジオメトリである場合、関数の結果は、Polygon
の外側のリングが最初の要素として含まれ、内側のリングが式に出現する順序で追加の要素として含まれるMultiLineString
になります。キャストする式が
MultiLineString
型の整形式ジオメトリである場合、関数の結果はそのMultiLineString
になります。キャストする式が、内部リングのないポリゴンのみを含む
MultiPolygon
型の整形式ジオメトリである場合、関数の結果は、式に出現する順序でポリゴンのリングを含むMultiLineString
になります。 式に内部リングを持つポリゴンが含まれている場合は、ER_WRONG_PARAMETERS_TO_STORED_FCT
エラーが発生します。キャストする式が linestring のみを含む
GeometryCollection
型の整形式ジオメトリである場合、関数の結果はこれらの linestring を含むMultiLineString
になります。 式が空であるか、他のジオメトリタイプが含まれている場合、ER_INVALID_CAST_TO_GEOMETRY
エラーが発生します。キャストする式が
LineString
,Polygon
,MultiLineString
,MultiPolygon
またはGeometryCollection
以外の型の整形式ジオメトリである場合、ER_INVALID_CAST_TO_GEOMETRY
エラーが発生します。
MultiPolygon へのキャストの条件
キャスト結果タイプが
MultiPolygon
の場合は、次の条件が適用されます:キャストする式が
Polygon
型の整形式のジオメトリである場合、関数の結果は、その唯一の要素としてPolygon
を含むMultiPolygon
になります。キャストする式が、すべての要素がリングである
MultiLineString
型の整形式ジオメトリである場合、関数の結果は、式の各要素の外側のリングのみを含むPolygon
を含むMultiPolygon
になります。 いずれかの要素がリングでない場合は、ER_INVALID_CAST_TO_GEOMETRY
エラーが発生します。 正しい順序でないリングがある場合 (外側のリングは反時計回りである必要があります)、ER_INVALID_CAST_POLYGON_RING_DIRECTION
エラーが発生します。キャストする式が
MultiPolygon
型の整形式ジオメトリである場合、関数の結果はそのMultiPolygon
になります。キャストする式がポリゴンのみを含む
GeometryCollection
型の整形式ジオメトリである場合、関数の結果はそれらのポリゴンを含むMultiPolygon
になります。 式が空であるか、他のジオメトリタイプが含まれている場合、ER_INVALID_CAST_TO_GEOMETRY
エラーが発生します。キャストする式が
Polygon
,MultiLineString
,MultiPolygon
またはGeometryCollection
以外の型の整形式ジオメトリである場合、ER_INVALID_CAST_TO_GEOMETRY
エラーが発生します。
GeometryCollection へのキャストの条件
キャスト結果タイプが
GeometryCollection
の場合は、次の条件が適用されます:GeometryCollection
とGeomCollection
は、同じ結果タイプのシノニムです。キャストする式が
Point
型の整形式のジオメトリである場合、関数の結果はそのPoint
を唯一の要素として含むGeometryCollection
になります。キャストする式が
LineString
型の整形式のジオメトリである場合、関数の結果はそのLineString
を唯一の要素として含むGeometryCollection
になります。キャストする式が
Polygon
型の整形式のジオメトリである場合、関数の結果はそのPolygon
を唯一の要素として含むGeometryCollection
になります。キャストする式が
MultiPoint
型の整形式ジオメトリである場合、関数の結果は、式に出現する順序で点を含むGeometryCollection
になります。キャストする式が
MultiLineString
型の整形式ジオメトリである場合、関数の結果は、式に出現する順序で linestring を含むGeometryCollection
になります。キャストする式が
MultiPolygon
型の整形式ジオメトリである場合、関数の結果は、式に出現する順序でMultiPolygon
の要素を含むGeometryCollection
になります。キャストする式が
GeometryCollection
型の整形式ジオメトリである場合、関数の結果はそのGeometryCollection
になります。
-
-
TIME
TIME
値を生成します。 -
UNSIGNED [INTEGER]
符号なし整数値を生成します。
-
YEAR
YEAR
値を生成します。 MySQL 8.0.22 で追加されました。YEAR
への変換は、次のルールによって制御されます:1901-2155 の範囲の 4 桁の数値の場合、またはこの範囲の 4 桁の数値として解釈できる文字列の場合は、対応する
YEAR
値を返します。-
1 桁または 2 桁で構成される数値の場合、またはこのような数値としてインターペットできる文字列の場合、次のように
YEAR
値を返します:数値が 1-69 の範囲内にある場合は、2000 を加算して合計を返します。
数値が 70-99 の範囲内にある場合は、1900 を加算して合計を返します。
0 と評価される文字列の場合、2000 を返します。
数値 0 の場合は 0 を返します。
-
DATE
、DATETIME
またはTIMESTAMP
値の場合、値のYEAR
部分を返します。TIME
値の場合、現在の年を返します。TIME
引数の型を指定しない場合、次に示すように、予期したものとは異なる結果が得られる可能性があります:mysql> SELECT CONVERT("11:35:00", YEAR), CONVERT(TIME "11:35:00", YEAR); +---------------------------+--------------------------------+ | CONVERT("11:35:00", YEAR) | CONVERT(TIME "11:35:00", YEAR) | +---------------------------+--------------------------------+ | 2011 | 2020 | +---------------------------+--------------------------------+
-
引数の型が
DECIMAL
,DOUBLE
,DECIMAL
またはREAL
の場合、次に示すように、値を最も近い整数に丸めてから、整数値のルールを使用して値をYEAR
にキャストしようとします:mysql> SELECT CONVERT(1944.35, YEAR), CONVERT(1944.50, YEAR); +------------------------+------------------------+ | CONVERT(1944.35, YEAR) | CONVERT(1944.50, YEAR) | +------------------------+------------------------+ | 1944 | 1945 | +------------------------+------------------------+ 1 row in set (0.00 sec) mysql> SELECT CONVERT(66.35, YEAR), CONVERT(66.50, YEAR); +----------------------+----------------------+ | CONVERT(66.35, YEAR) | CONVERT(66.50, YEAR) | +----------------------+----------------------+ | 2066 | 2067 | +----------------------+----------------------+ 1 row in set (0.00 sec)
GEOMETRY
型の引数は、YEAR
に変換できません。YEAR
に正常に変換できない値の場合は、NULL
を返します。
変換前に切り捨てる必要がある数値以外の文字を含む文字列値は、次に示すように警告を生成します:
mysql> SELECT CONVERT("1979aaa", YEAR); +--------------------------+ | CONVERT("1979aaa", YEAR) | +--------------------------+ | 1979 | +--------------------------+ 1 row in set, 1 warning (0.00 sec) mysql> SHOW WARNINGS; +---------+------+-------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------+ | Warning | 1292 | Truncated incorrect YEAR value: '1979aaa' | +---------+------+-------------------------------------------+
-