10bet网址
MySQL 5.6リファレンスマニュアル
本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb


12.10キャスト関数と演算子

表12.14キャスト関数

名前 説明
二进制 文字列をバ邮箱ナリ文字列にキャストします
把() 値を特定の型としてキャストします
将() 値を特定の型としてキャストします

  • 二进制

    二进制演算子は、それに続く文字列をバ以及ナリ文字列にキャストします。これは,カラムの比較を文字ごとでなく、バイトごとに強制的に実行させる簡単な方法です。これにより、カラムが二进制またはとして定義されていない場合でも,比較で大文字と小文字が区別されます。また,二进制では末尾の空白文字が重要になります。

    mysql> SELECT 'a' = 'a';SELECT BINARY 'a' = 'a';SELECT 'a' = 'a';SELECT BINARY 'a' = 'a';- > 0

    比較時に,二进制によって演算全体が影響を受けます。これは,同じ結果を持ついずれかのオペランドの前に指定できます。

    二进制strは,演员(str作为二进制)の略です。

    一部のコンテキストでは,ンデックス付きのカラムを二进制にキャストすると,MySQLはMySQLンデックスを効率的に使用できなくなります。

  • 演员(expr作为类型

    将()と同様に,把()関数には任意の型の式が指定され,指定された型の結果値が生成されます。詳細は,将()の説明を参照してください。

  • 转换(expr类型转换(expr使用transcoding_name

    将()および把()関数には,任意の型の式が指定され,指定された型の結果値が生成されます。

    結果の类型には,次の値のいずれかを指定できます。

    • 二进制((N)]

    • CHAR [(N)]

    • 日期

    • DATETIME

    • 十进制(([,D)))

    • 签署(整数)

    • 时间

    • 无符号(整数)

    二进制は,二进制デタ型の文字列を生成します。これによる比較への影響度にいては,セクション11.4.2 " binaryおよびvarbinary型"を参照してください。オプションの長さNが指定されている場合に,二进制(Nを使用すると,キャストでNバ邮箱トの引数しか使用されなくなります。値がNバトよりも短い場合は,Nの長さになるまで0 x00バ邮箱トでパディングされます。

    CHAR (N句を使用すると,キャストでN文字の引数しか使用されなくなります。

    把()および转换(…使用…)は標準SQLの構文です。使用形式以外の将()はodbcの構文です。

    使用とともに将()を使用すると,さまざまな文字セット間でデタが変換されます。米ySQL では、トランスコーディング名は対応する文字セット名と同じです。たとえば、このステートメントは、デフォルトの文字セットの文字列“abc”use utf8文字セットの対応する文字列に変換します。

    SELECT CONVERT('abc' USING utf8);

バイナリ文字列には文字セットがなく,大文字と小文字の区別の概念もないため,通常は,大文字と小文字が区別されない方法で,値またはその他のバ邮箱ナリ文字列を比較できません。大文字と小文字が区別されない比較を実行するには,将()関数を使用して、値を非バ以及ナリ文字列に変換します。結果の比較には,文字列照合順序が使用されます。たとえば,結果の文字セットに大文字と小文字が区別されない照合順序が含まれる場合は、就像演算子でも大文字と小文字が区別されません。

选择' a ' like convert (blob_col使用latin1)中的一个tbl_name

別の文字セットを使用するには,上記のステトメントのlatin1にその名前を代入します。変換された文字列用に特定の照合順序を指定するには,セクション10.1.9.2 " convert()とcast () "で説明するように,将()の呼び出しのあとに核对句を使用します。たとえば,latin1_german1_ciを使用する場合は次のとおりです。

选择' a ' like convert (blob_col使用latin1) COLLATE latin1_german1_ci FROMtbl_name

将()は,さまざま文字セットで表される文字列を比較する際に,より一般的に使用できます。

低()(および)上())をバナリ文字列(二进制VARBINARY)に適用しても,何の効果もありません。大文字/小文字の変換を実行するには,バe .ナリ文字列を非バe .ナリ文字列に変換します。

mysql> SET @str = BINARY 'New York';mysql> SELECT LOWER(@str), LOWER(CONVERT(@str USING latin1));+-------------+-----------------------------------+ | 低(@str) |(转换(@str使用latin1。中的一个 )) | +-------------+-----------------------------------+ | 纽约|纽约  | +-------------+-----------------------------------+

キャスト関数は,创建表……选择ステトメントで特定の型を持カラムを作成する際に役立ます。

创建表new_table SELECT ('2000-01-01');

この関数は,枚举カラムを語彙順にソトする際に役立こともあります。通常、枚举カラムのソトは,内部数値を使用して実行されます。値を字符にキャストすると,語彙順にソトされます。

选择enum_coltbl_nameORDER BY演员(enum_col字符);

演员(str作为二进制)二进制strと同じです。演员(expr字符)では,式はデフォルトの文字セットを持文字列として処理されます。

CONCAT('Date: ',CAST(NOW()为日期))のように,より複雑な式の一部として使用する場合でも,把()の結果が変わります。

デタを別の書式で抽出するには,把()ではなく,代わりに左()または提取()のような文字列関数を使用してください。セクション12.7 "日付および時間関数"を参照してください。

数値のコンテキストで文字列を数値にキャストするには,通常は,文字列値を数字と同様に使用する以外には何もする必要はありません。

mysql >选择1 + 1;- > 2

算術演算で文字列を使用する場合は,式の評価時に浮動小数点数に変換されます。

文字列のコンテキストで数字を使用する場合は,自動的に数字が文字列に変換されます。

mysql> SELECT ('hello you ',2);-> '你好2'

MySQL 5.6.4よりも前では,どのテブルからも選択されないステトメントの时间戳値で明示的に把()を使用すると,変換が実行される前に,その値がMySQL 5.6で文字列として処理されます。これにより,値を数値型にキャストすると,次に示すように値が切り捨てられます。

mysql> SELECT CAST(TIMESTAMP '2014-09-08 18:07:54' AS SIGNED);+-------------------------------------------------+ | (时间戳的2014-09-08 18:07:54签署 ) | +-------------------------------------------------+ | 2014年  | +-------------------------------------------------+ 1行集,警告(0.00秒)mysql >显示警告;+---------+------+----------------------------------------------------------+ | 水平| |消息代码  | +---------+------+----------------------------------------------------------+ | 警告| 1292 |截断整数值不正确:“2014-09-08 18:07:54 ' | +---------+------+----------------------------------------------------------+ 1行集(0.00秒)

次に示すように,これはテブルから行を選択するときには適用されません。

mysql >使用测试;CREATE TABLE c_test (col TIMESTAMP);查询OK, 0 rows affected (0.07 sec) mysql> INSERT INTO c_test VALUES ('2014-09-08 18:07:54');查询OK, 1行影响(0.05秒)mysql> SELECT col, CAST(col AS UNSIGNED) AS c_col FROM c_test;+---------------------+----------------+ | 坳| c_col  | +---------------------+----------------+ | 2014-09-08 18:07:54 | 20140908180754  | +---------------------+----------------+ 1行集(0.00秒)

MySQL 5.6.4以降では,次に示すように,どの行も選択されていないクエリーでも,選択されている場合と同様にCAST()で时间戳値が処理されます。

mysql> SELECT CAST(TIMESTAMP '2014-09-08 18:07:54' AS SIGNED);+-------------------------------------------------+ | (时间戳的2014-09-08 18:05:07签署 ) | +-------------------------------------------------+ | 20140908180754  | +-------------------------------------------------+ 1行集(0.00秒)

数字から文字列への暗黙的な変換にいては,セクション12.2 "式評価での型変換"を参照してください。

MySQLでは,符号付きと符号なしの両方の64ビット値を使用した演算がサポトされています。数値演算子 (+-など)を使用していて,オペランドのいずれかが符号なし整数である場合は,デフォルトの結果が符号なしになります(セクション12.6.1 "算術演算子"を参照してください)。これは,签署または无符号キャスト演算子を使用して,値をそれぞれ符号付きまたは符号なしの64ビット整数にキャストすることでオーバーライドできます。

mysql> SELECT CAST(CAST(1-2 AS UNSIGNED) AS SIGNED);- > 1

オペランドのいずれかが浮動小数点値である場合は,結果が浮動小数点値になり,上記のルールによる影響を受けません。(このコンテキストでは,小数カラム値は浮動小数点値とみなされます。)

mysql> SELECT CAST(1 AS UNSIGNED) - 2.0;- > -1.0

SQLモドは,変換演算の結果に影響を与えます。例:

  • 日付文字列を日付に変換する場合,将()把()を返し,NO_ZERO_DATESQLモドが有効になると警告を発行します。

  • 整数の減算では,NO_UNSIGNED_SUBTRACTIONSQLモードが有効になっている場合は,オペランドのいずれかが符号なしでも,結果が符号付きになります。

詳細は,セクション5.1.7 "サバSQLモド"を参照してください。


本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb