MySQL?中的?CAST?函數(shù)詳解及常見用法
MySQL 中的 CAST 函數(shù)詳解
CAST 函數(shù)是 MySQL 中用于數(shù)據(jù)類型轉(zhuǎn)換的重要函數(shù),它允許你將一個值從一種數(shù)據(jù)類型轉(zhuǎn)換為另一種數(shù)據(jù)類型。
一、基本語法
CAST(expression AS type)
或
CONVERT(expression, type)
這兩種語法功能相同,可以互換使用。
二、支持的數(shù)據(jù)類型
CAST 函數(shù)支持轉(zhuǎn)換為以下數(shù)據(jù)類型:
BINARY[(N)]- 二進制字符串CHAR[(N)]- 字符串,可指定長度DATE- 日期DATETIME- 日期時間DECIMAL[(M[,D])]- 十進制數(shù),可指定精度和小數(shù)位SIGNED [INTEGER]- 有符號整數(shù)UNSIGNED [INTEGER]- 無符號整數(shù)TIME- 時間JSON- JSON 格式 (MySQL 5.7.8+)
三、常見用法示例
1. 字符串轉(zhuǎn)數(shù)字
SELECT CAST('123' AS SIGNED); -- 轉(zhuǎn)換為有符號整數(shù),結(jié)果為 123
SELECT CONVERT('45.67', DECIMAL(5,2)); -- 轉(zhuǎn)換為帶2位小數(shù)的十進制數(shù),結(jié)果為 45.67
2. 數(shù)字轉(zhuǎn)字符串
SELECT CAST(123 AS CHAR); -- 轉(zhuǎn)換為字符串,結(jié)果為 '123' SELECT CAST(123.45 AS CHAR(10)); -- 轉(zhuǎn)換為長度為10的字符串,結(jié)果為 '123.45'
3. 日期時間轉(zhuǎn)換
SELECT CAST('2023-08-20' AS DATE); -- 轉(zhuǎn)換為日期類型
SELECT CAST(NOW() AS CHAR); -- 將當(dāng)前日期時間轉(zhuǎn)為字符串
4. 布爾值轉(zhuǎn)換
SELECT CAST(1 AS UNSIGNED); -- 結(jié)果為 1 SELECT CAST(0 AS SIGNED); -- 結(jié)果為 0
5. 二進制轉(zhuǎn)換
SELECT CAST('MySQL' AS BINARY); -- 轉(zhuǎn)換為二進制字符串
SELECT CAST(123 AS BINARY); -- 將數(shù)字轉(zhuǎn)為二進制
四、特殊轉(zhuǎn)換案例
1. 處理 NULL 值
SELECT CAST(NULL AS SIGNED); -- 結(jié)果為 NULL
2. 截斷處理
SELECT CAST('123.456' AS DECIMAL(5,2)); -- 結(jié)果為 123.46 (四舍五入)
SELECT CAST('123.456' AS DECIMAL(5,1)); -- 結(jié)果為 123.5 (四舍五入)
3. 轉(zhuǎn)換失敗處理
SELECT CAST('abc' AS SIGNED); -- 結(jié)果為 0 (無法轉(zhuǎn)換時返回0)
SELECT CAST('2023-02-30' AS DATE); -- 結(jié)果為 NULL (無效日期)
五、實際應(yīng)用場景
1. 類型安全的比較
-- 避免字符串和數(shù)字的隱式轉(zhuǎn)換 SELECT * FROM products WHERE CAST(price AS CHAR) LIKE '12%';
2. 格式化輸出
SELECT
product_name,
CONCAT('$', CAST(price AS DECIMAL(10,2))) AS formatted_price
FROM products;
3. 數(shù)據(jù)遷移和清洗
-- 將字符串列轉(zhuǎn)為數(shù)字進行計算 UPDATE orders SET total = CAST(subtotal AS DECIMAL(10,2)) + CAST(tax AS DECIMAL(10,2));
4. 動態(tài)SQL處理
SET @str_value = '123'; SELECT * FROM table WHERE id = CAST(@str_value AS SIGNED);
六、與 CONVERT 函數(shù)的區(qū)別
CAST 和 CONVERT 函數(shù)功能基本相同,但有細微差別:
語法不同:
- CAST:
CAST(expr AS type) - CONVERT:
CONVERT(expr, type)或CONVERT(expr USING charset)
- CAST:
CONVERT 額外支持字符集轉(zhuǎn)換:
SELECT CONVERT('MySQL' USING utf8mb4);
七、性能考慮
索引使用:對列使用 CAST 函數(shù)通常會導(dǎo)致索引失效
-- 不推薦 (索引失效) SELECT * FROM users WHERE CAST(age AS CHAR) = '25'; -- 推薦 (可以使用索引) SELECT * FROM users WHERE age = 25;
隱式轉(zhuǎn)換:MySQL 會自動進行某些類型轉(zhuǎn)換,但顯式使用 CAST 更安全明確
精度損失:轉(zhuǎn)換時要注意可能的精度損失或數(shù)據(jù)截斷
八、與其他數(shù)據(jù)庫的兼容性
- CAST 函數(shù)是 SQL 標(biāo)準(zhǔn)的一部分,在大多數(shù)數(shù)據(jù)庫中都支持
- 語法基本相同,但支持的數(shù)據(jù)類型可能略有差異
- MySQL 的 CAST 在某些情況下比其他數(shù)據(jù)庫更寬松(如字符串轉(zhuǎn)數(shù)字)
CAST 函數(shù)是 MySQL 中處理數(shù)據(jù)類型轉(zhuǎn)換的強大工具,合理使用可以確保數(shù)據(jù)的一致性和查詢的正確性。在需要明確控制數(shù)據(jù)類型轉(zhuǎn)換的場景下,CAST 函數(shù)是必不可少的。
到此這篇關(guān)于MySQL 中的 CAST 函數(shù)詳解的文章就介紹到這了,更多相關(guān)MySQL CAST 函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql Workbench查詢mysql數(shù)據(jù)庫方法
在本篇文章里小編給大家分享了個關(guān)于Mysql Workbench查詢mysql數(shù)據(jù)庫方法和步驟,有需要的朋友們學(xué)習(xí)下。2019-03-03
MySQL批量修改表及表內(nèi)字段排序規(guī)則舉例詳解
在MySQL中字段排序規(guī)則(也稱為字符集和排序規(guī)則)用于確定如何比較和排序字符串,下面這篇文章主要給大家介紹了關(guān)于MySQL批量修改表及表內(nèi)字段排序規(guī)則的相關(guān)資料,需要的朋友可以參考下2024-05-05
mysql Non-Transactional Database Only(只支持MyISAM)
按照discuz官方的建議,選的都是Non-Transactional Database Only 只支持MyISAM,其實默認都安裝也挺好2016-04-04
MySql學(xué)習(xí)筆記之事務(wù)隔離級別詳解
這篇文章主要給大家介紹了關(guān)于MySql學(xué)習(xí)筆記之事務(wù)隔離級別的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
遠程連接mysql數(shù)據(jù)庫注意事項記錄(遠程連接慢skip-name-resolve)
有時候我們需要遠程連接mysql數(shù)據(jù)庫,就需要注意下面的問題,方便大家解決,腳本之家小編特為大家準(zhǔn)備了一些資料2012-07-07
關(guān)于 MySQL 嵌套子查詢中無法關(guān)聯(lián)主表字段問題的解決方法
這篇文章主要介紹了關(guān)于 MySQL 嵌套子查詢中,無法關(guān)聯(lián)主表字段問題的折中解決方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12

