品牌網(wǎng)站怎么做鄭州建網(wǎng)站的公司
文章目錄
- 一、語法
- 二、示例
- 2.1、復(fù)雜示例
- 三、cast與convert的區(qū)別
CAST 函數(shù)是 SQL 中的一種類型轉(zhuǎn)換函數(shù),它用于將一個數(shù)據(jù)類型轉(zhuǎn)換為另一個數(shù)據(jù)類型,這篇文章主要介紹了Mysql中Cast()函數(shù)的用法,需要的朋友可以參考下。
Mysql提供了兩種將值轉(zhuǎn)換成指定數(shù)據(jù)類型的函數(shù)
- CONVERT函數(shù):用于將值轉(zhuǎn)換為指定的數(shù)據(jù)類型或字符集。更多內(nèi)容參考:Mysql convert函數(shù)
- CAST函數(shù) :用于將值轉(zhuǎn)換為指定的數(shù)據(jù)類型。更多內(nèi)容參考:Mysql cast函數(shù)
以下內(nèi)容基于mysql8.0進(jìn)行講解。
Mysql 8.0 cast函數(shù)官網(wǎng)
一、語法
# 語法如下
CAST(expr AS type [ARRAY])示例:將值轉(zhuǎn)換為日期數(shù)據(jù)類型:
SELECT CAST('2021-08-29' AS DATE);
參數(shù)說明:
參數(shù) | 描述 |
---|---|
expr | 必填。要轉(zhuǎn)換的值、列名 |
type | 必填。要轉(zhuǎn)換成的數(shù)據(jù)類型。mysql版本不同,支持的數(shù)據(jù)類型不同,使用時需注意。 |
數(shù)據(jù)類型支持如下
類型 | 描述 | 備注 |
---|---|---|
DATE | 將 value 轉(zhuǎn)化為 DATE 類型。 格式: “YYYY-MM-DD” | |
DATETIME | 將 value 轉(zhuǎn)化為 DATETIME 類型。格式: “YYYY-MM-DD HH:MM:SS” | |
DECIMAL[(M[,D])] | 將 value 轉(zhuǎn)化為 DECIMAL 類型。使用可選的 M 和 D 參數(shù)指定最大位數(shù)(M)和小數(shù)點(diǎn)(D)后的位數(shù) | |
TIME | 將 value 轉(zhuǎn)化為 TIME 類型。格式: “HH:MM:SS” | |
CHAR | 將 value 轉(zhuǎn)化為 CHAR 類型 (固定長度的字符串) | |
NCHAR | 將 value 轉(zhuǎn)化為 NCHAR (類似 CHAR, 但生成一個具有國家字符集的字符串) | |
SIGNED | 將 value 轉(zhuǎn)化為 SIGNED (有符號的 64 位整數(shù)) | |
UNSIGNED | 將 value 轉(zhuǎn)化為 UNSIGNED (無符號 64 位整數(shù)) | |
BINARY | 將 value 轉(zhuǎn)化為 BINARY (二進(jìn)制字符串) | |
DOUBLE | 將value轉(zhuǎn)化為DOUBLE類型 | Added in MySQL 8.0.17 |
FLOAT | 將value轉(zhuǎn)化為FLOAT類型 。 | Added in MySQL 8.0.17 |
更多內(nèi)容參考官網(wǎng):Mysql 8.0 cast函數(shù)官網(wǎng)
二、示例
1.將值轉(zhuǎn)換為DATE數(shù)據(jù)類型
-- 2017-08-29
SELECT CAST('2017-08-29' AS DATE); -- 2022-04-27 15:42:19
SELECT NOW();
-- 2022-04-27
SELECT CAST(NOW() AS DATE);
2.將值轉(zhuǎn)換為DATETIME數(shù)據(jù)類型
-- 2022-04-27 00:00:00
SELECT CAST('2022-04-27' AS DATETIME);
3.將值轉(zhuǎn)換為TIME數(shù)據(jù)類型
-- 14:06:10
SELECT CAST('14:06:10' AS TIME);
-- 14:06:10
SELECT CAST('2022-04-27 14:06:10' AS TIME);
4.將值轉(zhuǎn)換為CHAR數(shù)據(jù)類型
-- '150'
SELECT CAST(150 AS CHAR); -- 'Hello World437'
SELECT CONCAT('Hello World',CAST(437 AS CHAR));
5.將值轉(zhuǎn)換為SIGNED數(shù)據(jù)類型
-- 5
SELECT CAST('5.0' AS SIGNED);
-- 2
SELECT (1 + CAST('3' AS SIGNED))/2;
-- -5
SELECT CAST(5-10 AS SIGNED);
-- 6
SELECT CAST(6.4 AS SIGNED);
-- -6
SELECT CAST(-6.4 AS SIGNED);
-- 7
SELECT CAST(6.5 AS SIGNED);
-- -7
SELECT CAST(-6.5 AS SIGNED);
6.將值轉(zhuǎn)換為UNSIGNED數(shù)據(jù)類型
-- 5
SELECT CAST('5.0' AS UNSIGNED);
-- 6
SELECT CAST(6.4 AS UNSIGNED);
-- 0
SELECT CAST(-6.4 AS UNSIGNED);
-- 7
SELECT CAST(6.5 AS UNSIGNED);
-- 0
SELECT CAST(-6.5 AS UNSIGNED);
7.將值轉(zhuǎn)換為DECIMAL數(shù)據(jù)類型
-- 9
SELECT CAST('9.0' AS DECIMAL);-- DECIMAL(數(shù)值精度,小數(shù)點(diǎn)保留長度)
-- DECIMAL(10,2)可以存儲最多具有8位整數(shù)和2位小數(shù)的數(shù)字
-- 精度與小數(shù)位數(shù)分別為10與2
-- 精度是總的數(shù)字位數(shù),包括小數(shù)點(diǎn)左邊和右邊位數(shù)的總和
-- 小數(shù)位數(shù)是小數(shù)點(diǎn)右邊的位數(shù)
-- 9.50
SELECT CAST('9.5' AS DECIMAL(10,2));
-- 99999999.99
SELECT CAST('1234567890.123' AS DECIMAL(10,2));-- 220.232
SELECT CAST('220.23211231' AS DECIMAL(10, 3));
-- 220.232
SELECT CAST(220.23211231 AS DECIMAL(10, 3));
2.1、復(fù)雜示例
1.如下,按文件名中的數(shù)字進(jìn)行排序
讓我們先看幾個 file_name的示例值:
- 中文_1.mp4
- 中文_12.mp4
- 中文_2.mp4
- 中文_10.mp4
數(shù)據(jù)準(zhǔn)備
CREATE TABLE `test1` (`id` int NOT NULL PRIMARY KEY AUTO_INCREMENT comment '主鍵id',`file_name` varchar(10) DEFAULT NULL COMMENT '文件名'
) ENGINE=InnoDB AUTO_INCREMENT=1;insert into test1(file_name) values
('中文_1.txt'),
('中文_2.txt'),
('中文_10.txt'),
('中文_12.txt');
使用 REGEXP_SUBSTR 函數(shù)提取并排序
在MySQL 8.0及以上版本中,我們可以使用 REGEXP_SUBSTR() 函數(shù)來提取字符串中的數(shù)字部分。這個函數(shù)允許我們使用正則表達(dá)式來指定我們想要匹配的模式。在這個例子中,我們使用正則表達(dá)式 \d+ 來匹配一個或多個數(shù)字。
以下是完整的SQL查詢,用于實(shí)現(xiàn)按數(shù)字排序:
SELECT *
FROM test1
WHERE file_name LIKE '%中文%'
ORDER BY CAST(REGEXP_SUBSTR(file_name , '\\d+') AS UNSIGNED);
這條SQL語句做了以下幾件事:
WHERE original_name LIKE '%中文%'
:篩選出所有文件名包含“中文”的記錄。REGEXP_SUBSTR(original_name, '\\d+')
:從 original_name 中提取第一組連續(xù)的數(shù)字。CAST(... AS UNSIGNED)
:將提取出的字符串轉(zhuǎn)換成無符號整數(shù),以便按數(shù)字進(jìn)行排序。
三、cast與convert的區(qū)別
CAST() 和 CONVERT() 都可以更改 MySQL 中的數(shù)據(jù)類型。主要區(qū)別在于 CONVERT() 還可以將數(shù)據(jù)的字符集轉(zhuǎn)換為另一個字符集。CAST() 就不能用于更改字符集。