mysql类型转换
MYSQL Cast函數(shù) 類型轉(zhuǎn)換 BINARY
BINARY操作符將后面的字符串拋給一個(gè)二進(jìn)制字符串。這是一種簡(jiǎn)單的方式來(lái)促使逐字節(jié)而不是逐字符的進(jìn)行列比較。這使得比較區(qū)分大小寫,即使該列不被定義為 BINARY或 BLOB。BINARY也會(huì)產(chǎn)生結(jié)尾空白,從而更加顯眼。
mysql> SELECT 'a' = 'A';
-> 1
mysql> SELECT BINARY 'a' = 'A';
-> 0
mysql> SELECT 'a' = 'a ';
-> 1
mysql> SELECT BINARY 'a' = 'a ';
-> 0
BINARY影響整個(gè)比較;它可以在任何操作數(shù)前被給定,而產(chǎn)生相同的結(jié)果。
BINARY str 是CAST(str AS BINARY)的縮略形式。
注意,在一些語(yǔ)境中,假如你將一個(gè)編入索引的列派給BINARY, MySQL 將不能有效使用這個(gè)索引。
假如你想要將一個(gè) BLOB值或其它二進(jìn)制字符串進(jìn)行區(qū)分大小寫的比較,你可利用二進(jìn)制字符串沒(méi)有字符集這一事實(shí)實(shí)現(xiàn)這個(gè)目的,這樣就不會(huì)有文書夾的概念。為執(zhí)行一個(gè)區(qū)分大小寫的比較,可使用 CONVERT()函數(shù)將一個(gè)字符串值轉(zhuǎn)化為一個(gè)不區(qū)分大小寫的字符集。其結(jié)果為一個(gè)非二進(jìn)制字符串,因此 LIKE 操作也不會(huì)區(qū)分大小寫:
SELECT 'A' LIKE CONVERT(blob_col USING latin1) FROM tbl_name;
若要使用一個(gè)不同的字符集, 替換其在上述語(yǔ)句中的latin1名。
CONVERT()一般可用于比較出現(xiàn)在不同字符集中的字符串。
CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name)
CAST() 和CONVERT() 函數(shù)可用來(lái)獲取一個(gè)類型的值,并產(chǎn)生另一個(gè)類型的值。
這個(gè)類型 可以是以下值其中的 一個(gè):
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
BINARY 產(chǎn)生一個(gè)二進(jìn)制字符串。關(guān)于它怎樣影響比較結(jié)果的說(shuō)明見(jiàn)本章中 BINARY操作符項(xiàng)。
假如給定了隨意長(zhǎng)度N,則 BINARY[N] 使 cast使用該參數(shù)的不多于 N 個(gè)字節(jié)。同樣的, CHAR[N]會(huì)使 cast 使用該參數(shù)的不多于N 個(gè)字符。
CAST() and CONVERT(... USING ...) 是標(biāo)準(zhǔn) SQL語(yǔ)法。CONVERT()的非USING 格式是ofis ODBC語(yǔ)法。
帶有USING的CONVERT() 被用來(lái)在不同的字符集之間轉(zhuǎn)化數(shù)據(jù)。在 MySQL中, 自動(dòng)譯碼名和相應(yīng)的字符集名稱相同。例如。 這個(gè)語(yǔ)句將服務(wù)器的默認(rèn)字符集中的字符串 'abc'轉(zhuǎn)化為utf8字符集中相應(yīng)的字符串:
SELECT CONVERT('abc' USING utf8);
當(dāng)你想要在一個(gè)CREATE ... SELECT 語(yǔ)句中創(chuàng)建一個(gè)特殊類型的列,則cast函數(shù)會(huì)很有用:
CREATE TABLE new_table SELECT CAST('2000-01-01' AS DATE);
該函數(shù)也用于ENUM 列按詞法順序的排序。通常ENUM列的排序在使用內(nèi)部數(shù)值時(shí)發(fā)生。將這些值按照詞法順序派給 CHAR 結(jié)果:
SELECT enum_col FROM tbl_name ORDER BY CAST(enum_col AS CHAR);
CAST(str AS BINARY)和BINARY str相同。 CAST(expr AS CHAR) 將表達(dá)式視為一個(gè)帶有默認(rèn)字符集的字符串。
若用于一個(gè)諸如 CONCAT('Date: ',CAST(NOW() AS DATE))這樣的比較復(fù)雜的表達(dá)式的一部分,CAST()也會(huì)改變結(jié)果。
你不應(yīng)在不同的格式中使用 CAST() 來(lái)析取數(shù)據(jù),但可以使用諸如LEFT() 或 EXTRACT() 的樣的字符串函數(shù)來(lái)代替。請(qǐng)參見(jiàn)12.5節(jié),"日期和時(shí)間函數(shù)"。
若要在數(shù)值語(yǔ)境中將一個(gè)字符串派給一個(gè)數(shù)值, 通常情況下,除了將字符串值作為數(shù)字使用外,你不需要做任何事:
mysql> SELECT 1+'1';
-> 2
若要在一個(gè)字符串語(yǔ)境中使用一個(gè)數(shù)字,該數(shù)字會(huì)被自動(dòng)轉(zhuǎn)化為一個(gè)BINARY 字符串。
mysql> SELECT CONCAT('hello you ',2);
-> 'hello you 2'
MySQL 支持帶符號(hào)和無(wú)符號(hào)的64比特值的運(yùn)算。若你正在使用數(shù)字操作符 (如 +) 而其中一個(gè)操作數(shù)為無(wú)符號(hào)整數(shù),則結(jié)果為無(wú)符號(hào)。可使用SIGNED 和UNSIGNED cast 操作符來(lái)覆蓋它。將運(yùn)算分別派給帶符號(hào)或無(wú)符號(hào)64比特整數(shù)。
mysql> SELECT CAST(1-2 AS UNSIGNED)
-> 18446744073709551615
mysql> SELECT CAST(CAST(1-2 AS UNSIGNED) AS SIGNED);
-> -1
注意,假如任意一個(gè)操作數(shù)為一個(gè)浮點(diǎn)值,則結(jié)果為一個(gè)浮點(diǎn)值, 且不會(huì)受到上述規(guī)則影響 (關(guān)于這一點(diǎn), DECIMAL 列值被視為浮點(diǎn)值)。
mysql> SELECT CAST(1 AS UNSIGNED) - 2.0;
-> -1.0
BINARY操作符將后面的字符串拋給一個(gè)二進(jìn)制字符串。這是一種簡(jiǎn)單的方式來(lái)促使逐字節(jié)而不是逐字符的進(jìn)行列比較。這使得比較區(qū)分大小寫,即使該列不被定義為 BINARY或 BLOB。BINARY也會(huì)產(chǎn)生結(jié)尾空白,從而更加顯眼。
mysql> SELECT 'a' = 'A';
-> 1
mysql> SELECT BINARY 'a' = 'A';
-> 0
mysql> SELECT 'a' = 'a ';
-> 1
mysql> SELECT BINARY 'a' = 'a ';
-> 0
BINARY影響整個(gè)比較;它可以在任何操作數(shù)前被給定,而產(chǎn)生相同的結(jié)果。
BINARY str 是CAST(str AS BINARY)的縮略形式。
注意,在一些語(yǔ)境中,假如你將一個(gè)編入索引的列派給BINARY, MySQL 將不能有效使用這個(gè)索引。
假如你想要將一個(gè) BLOB值或其它二進(jìn)制字符串進(jìn)行區(qū)分大小寫的比較,你可利用二進(jìn)制字符串沒(méi)有字符集這一事實(shí)實(shí)現(xiàn)這個(gè)目的,這樣就不會(huì)有文書夾的概念。為執(zhí)行一個(gè)區(qū)分大小寫的比較,可使用 CONVERT()函數(shù)將一個(gè)字符串值轉(zhuǎn)化為一個(gè)不區(qū)分大小寫的字符集。其結(jié)果為一個(gè)非二進(jìn)制字符串,因此 LIKE 操作也不會(huì)區(qū)分大小寫:
SELECT 'A' LIKE CONVERT(blob_col USING latin1) FROM tbl_name;
若要使用一個(gè)不同的字符集, 替換其在上述語(yǔ)句中的latin1名。
CONVERT()一般可用于比較出現(xiàn)在不同字符集中的字符串。
CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name)
CAST() 和CONVERT() 函數(shù)可用來(lái)獲取一個(gè)類型的值,并產(chǎn)生另一個(gè)類型的值。
這個(gè)類型 可以是以下值其中的 一個(gè):
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
BINARY 產(chǎn)生一個(gè)二進(jìn)制字符串。關(guān)于它怎樣影響比較結(jié)果的說(shuō)明見(jiàn)本章中 BINARY操作符項(xiàng)。
假如給定了隨意長(zhǎng)度N,則 BINARY[N] 使 cast使用該參數(shù)的不多于 N 個(gè)字節(jié)。同樣的, CHAR[N]會(huì)使 cast 使用該參數(shù)的不多于N 個(gè)字符。
CAST() and CONVERT(... USING ...) 是標(biāo)準(zhǔn) SQL語(yǔ)法。CONVERT()的非USING 格式是ofis ODBC語(yǔ)法。
帶有USING的CONVERT() 被用來(lái)在不同的字符集之間轉(zhuǎn)化數(shù)據(jù)。在 MySQL中, 自動(dòng)譯碼名和相應(yīng)的字符集名稱相同。例如。 這個(gè)語(yǔ)句將服務(wù)器的默認(rèn)字符集中的字符串 'abc'轉(zhuǎn)化為utf8字符集中相應(yīng)的字符串:
SELECT CONVERT('abc' USING utf8);
當(dāng)你想要在一個(gè)CREATE ... SELECT 語(yǔ)句中創(chuàng)建一個(gè)特殊類型的列,則cast函數(shù)會(huì)很有用:
CREATE TABLE new_table SELECT CAST('2000-01-01' AS DATE);
該函數(shù)也用于ENUM 列按詞法順序的排序。通常ENUM列的排序在使用內(nèi)部數(shù)值時(shí)發(fā)生。將這些值按照詞法順序派給 CHAR 結(jié)果:
SELECT enum_col FROM tbl_name ORDER BY CAST(enum_col AS CHAR);
CAST(str AS BINARY)和BINARY str相同。 CAST(expr AS CHAR) 將表達(dá)式視為一個(gè)帶有默認(rèn)字符集的字符串。
若用于一個(gè)諸如 CONCAT('Date: ',CAST(NOW() AS DATE))這樣的比較復(fù)雜的表達(dá)式的一部分,CAST()也會(huì)改變結(jié)果。
你不應(yīng)在不同的格式中使用 CAST() 來(lái)析取數(shù)據(jù),但可以使用諸如LEFT() 或 EXTRACT() 的樣的字符串函數(shù)來(lái)代替。請(qǐng)參見(jiàn)12.5節(jié),"日期和時(shí)間函數(shù)"。
若要在數(shù)值語(yǔ)境中將一個(gè)字符串派給一個(gè)數(shù)值, 通常情況下,除了將字符串值作為數(shù)字使用外,你不需要做任何事:
mysql> SELECT 1+'1';
-> 2
若要在一個(gè)字符串語(yǔ)境中使用一個(gè)數(shù)字,該數(shù)字會(huì)被自動(dòng)轉(zhuǎn)化為一個(gè)BINARY 字符串。
mysql> SELECT CONCAT('hello you ',2);
-> 'hello you 2'
MySQL 支持帶符號(hào)和無(wú)符號(hào)的64比特值的運(yùn)算。若你正在使用數(shù)字操作符 (如 +) 而其中一個(gè)操作數(shù)為無(wú)符號(hào)整數(shù),則結(jié)果為無(wú)符號(hào)。可使用SIGNED 和UNSIGNED cast 操作符來(lái)覆蓋它。將運(yùn)算分別派給帶符號(hào)或無(wú)符號(hào)64比特整數(shù)。
mysql> SELECT CAST(1-2 AS UNSIGNED)
-> 18446744073709551615
mysql> SELECT CAST(CAST(1-2 AS UNSIGNED) AS SIGNED);
-> -1
注意,假如任意一個(gè)操作數(shù)為一個(gè)浮點(diǎn)值,則結(jié)果為一個(gè)浮點(diǎn)值, 且不會(huì)受到上述規(guī)則影響 (關(guān)于這一點(diǎn), DECIMAL 列值被視為浮點(diǎn)值)。
mysql> SELECT CAST(1 AS UNSIGNED) - 2.0;
-> -1.0
轉(zhuǎn)載于:https://www.cnblogs.com/liaomin416100569/archive/2010/02/05/9331959.html
總結(jié)
- 上一篇: DataList嵌套
- 下一篇: 排名的SQL语句