このページは機械翻訳したものです。
キャスト関数および演算子を使用すると、あるデータ型から別のデータ型に値を変換できます。
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_namecharset_name および charset_name のデフォルト照合順序になります。 CHARACTER SET を省略すると、結果の文字セットおよび照合順序は、デフォルトの接続文字セットおよび照合順序を決定する charset_namecharacter_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_DATESQL モードが有効なときに警告を生成します。整数の減算では、
NO_UNSIGNED_SUBTRACTIONSQL モードが有効になっている場合は、オペランドのいずれかが符号なしでも、結果が符号付きになります。
次のリストでは、使用可能なキャスト関数および演算子について説明します:
-
BINARYexprBINARY演算子は、式をバイナリ文字列 (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_binCHAR、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(exprAStype[ARRAY])CAST(timestamp_valueAT TIME ZONEtimezone_specifierAS 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(,exprUSINGtranscoding_name)CONVERT(expr,type)CONVERT()関数は、任意の型の式を受け取り、指定された型の結果値を生成します。CONVERT(... USING ...)は標準の SQL 構文です。USING形式以外のCONVERT()は ODBC の構文です。CONVERT(は、異なる文字セット間でデータを変換します。 MySQL では、トランスコーディング名は対応する文字セット名と同じです。 たとえば、次のステートメントは、デフォルト文字セットの文字列exprUSINGtranscoding_name)'abc'をutf8mb4文字セットの対応する文字列に変換します:SELECT CONVERT('abc' USING utf8mb4);CONVERT(構文 (expr,type)USINGを使用しない) では、結果タイプを指定する式およびtype値を使用します。 この操作は、同等のCAST(として表現することもできます。 次のexprAStype)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_nameASCII:CHARACTER SET latin1の短縮形。UNICODE:CHARACTER SET ucs2の短縮形。
いずれの場合も、文字列にはデフォルトの照合順序が設定されます。
-
DATEDATE値を生成します。 -
DATETIMEDATETIME値を生成します。 -
DECIMAL[(M[,D])]DECIMAL値を生成します。 オプションのMおよびD値が指定されている場合は、小数点以下の最大桁数 (精度) と桁数 (スケール) を指定します。 -
DOUBLEDOUBLE結果を生成します。 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 で追加されました。 -
JSONJSON値を生成します。JSONと他のタイプ間の値変換のルールの詳細は、JSON 値の比較および順序付け を参照してください。 -
NCHAR[(N)]CHARと似ていますが、各国語文字セットの文字列を生成します。 セクション10.3.7「各国語文字セット」を参照してください。CHARとは異なり、NCHARでは後続の文字セット情報を指定できません。 -
REALREALタイプの結果を生成します。REAL_AS_FLOATSQL モードが有効な場合、これは実際にはFLOATです。それ以外の場合、結果のタイプはDOUBLEになります。 -
SIGNED [INTEGER]符号付き整数値を生成します。
-
spatial_typeMySQL 8.0.24 では、
CAST()およびCONVERT()は、空間型の特定の組合せに対して、ある空間型から別の空間型へのジオメトリ値のキャストをサポートしています。 次のリストに、許可されているタイプの組合せを示します。ここで、「MySQL 拡張機能」は、SQL/MM standard で定義されているもの以外に、MySQL で実装されているキャストを指定します:-
Pointから次の操作を行います:MultiPointGeometryCollection
-
LineStringから次の操作を行います:Polygon(MySQL 拡張機能)MultiPoint(MySQL 拡張機能)MultiLineStringGeometryCollection
-
Polygonから次の操作を行います:LineString(MySQL 拡張機能)MultiLineString(MySQL 拡張機能)MultiPolygonGeometryCollection
-
MultiPointから次の操作を行います:PointLineString(MySQL 拡張機能)GeometryCollection
-
MultiLineStringから次の操作を行います:LineStringPolygon(MySQL 拡張機能)MultiPolygon(MySQL 拡張機能)GeometryCollection
-
MultiPolygonから次の操作を行います:PolygonMultiLineString(MySQL 拡張機能)GeometryCollection
-
GeometryCollectionから次の操作を行います:PointLineStringPolygonMultiPointMultiLineStringMultiPolygon
空間キャストでは、
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になります。
-
-
TIMETIME値を生成します。 -
UNSIGNED [INTEGER]符号なし整数値を生成します。
-
YEARYEAR値を生成します。 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' | +---------+------+-------------------------------------------+
-