Mysql類型轉換

來源:互聯網
上載者:User
12.8. Cast函數和操作符
  • BINARY

BINARY操作符將後面的字串拋給一個二進位字串。這是一種簡單的方式來促使逐位元組而不是逐字元的進行列比較。這使得比較區分大小寫,即使該列不被定義為 BINARY或 BLOB。BINARY也會產生結尾空白,從而更加顯眼。

mysql> SELECT 'a' = 'A';

        -> 1

mysql> SELECT BINARY 'a' = 'A';

        -> 0

mysql> SELECT 'a' = 'a ';

        -> 1

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

        -> 0

BINARY影響整個比較;它可以在任何運算元前被給定,而產生相同的結果。

BINARY str 是CAST(str AS BINARY)的縮減形式。

注意,在一些語境中,假如你將一個編入索引的列派給BINARY, MySQL 將不能有效使用這個索引。

假如你想要將一個 BLOB值或其它二進位字串進行區分大小寫比較,你可利用二進位字串沒有字元集這一事實實現這個目的,這樣就不會有文書夾的概念。為執行一個區分大小寫比較,可使用  CONVERT()函數將一個字串值轉化為一個不區分大小寫字元集。其結果為一個非二進位字串,因此 LIKE 操作也不會區分大小寫:

SELECT 'A' LIKE CONVERT(blob_col USING latin1) FROM tbl_name;

若要使用一個不同的字元集, 替換其在上述語句中的latin1名。

CONVERT()一般可用於比較出現在不同字元集中的字串。

  • CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name)

CAST() 和CONVERT() 函數可用來擷取一個類型的值,併產生另一個類型的值。

這個類型 可以是以下值其中的 一個: 

    • BINARY[(N)]
    • CHAR[(N)]
    • DATE
    • DATETIME
    • DECIMAL
    • SIGNED [INTEGER]
    • TIME
    • UNSIGNED [INTEGER]

BINARY 產生一個二進位字串。關於它怎樣影響比較結果的說明見本章中 BINARY操作符項。

假如給定了隨意長度N,則 BINARY[N] 使 cast使用該參數的不多於 N 個位元組。同樣的, CHAR[N]會使 cast 使用該參數的不多於N 個字元。

CAST() and CONVERT(... USING ...) 是標準 SQL文法。CONVERT()的非USING 格式是ofis ODBC文法。

帶有USING的CONVERT() 被用來在不同的字元集之間轉化資料。在 MySQL中, 自動解碼名和相應的字元集名稱相同。例如。 這個語句將伺服器的預設字元集中的字串 'abc'轉化為utf8字元集中相應的字串: 

SELECT CONVERT('abc' USING utf8);

當你想要在一個CREATE ... SELECT 語句中建立一個特殊類型的列,則cast函數會很有用:

CREATE TABLE new_table SELECT CAST('2000-01-01' AS DATE);

該函數也用於ENUM 列按詞法順序的排序。通常ENUM列的排序在使用內部數值時發生。將這些值按照詞法順序派給 CHAR 結果:

SELECT enum_col FROM tbl_name ORDER BY CAST(enum_col AS CHAR);

CAST(str AS BINARY)和BINARY str相同 CAST(expr AS CHAR) 將運算式視為一個帶有預設字元集的字串。

若用於一個諸如 CONCAT('Date: ',CAST(NOW() AS DATE))這樣的比較複雜的運算式的一部分,CAST()也會改變結果。

你不應在不同的格式中使用 CAST() 來析取資料,但可以使用諸如LEFT() 或 EXTRACT() 的樣的字串函數來代替。請參見12.5節,“日期和時間函數”。

若要在數值語境中將一個字串派給一個數值, 通常情況下,除了將字串值作為數字使用外,你不需要做任何事:

mysql> SELECT 1+'1';

       -> 2

若要在一個字串語境中使用一個數字,該數字會被自動轉化為一個BINARY 字串。

mysql> SELECT CONCAT('hello you ',2);

        -> 'hello you 2'

MySQL 支援帶符號和無符號的64位元值的運算。若你正在使用數字操作符  (如 +) 而其中一個運算元為不帶正負號的整數,則結果為無符號。可使用SIGNED 和UNSIGNED cast 操作符來覆蓋它。將運算分別派給帶符號或無符號64位元整數。

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

若你在一個算術運算中使用了一個字串,它會被轉化為一個浮點數。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.