首頁 > 軟體

Mysql CAST函數的具體使用

2022-08-12 14:05:18

CAST函數用於將值從一種資料型別轉換為表示式中指定的另一種資料型別

語法

CAST(value AS datatype)

AS關鍵字用於分隔兩個引數,在AS之前的是要處理的資料,在AS之後的是要轉換的資料型別 

引數說明

value: 要轉換的值

datatype: 要轉換成的資料型別

datatype引數取值

描述
DATE將value轉換成'YYYY-MM-DD'格式
DATETIME將value轉換成'YYYY-MM-DD HH:MM:SS'格式
TIME將value轉換成'HH:MM:SS'格式
CHAR將value轉換成CHAR(固定長度的字串)格式
SIGNED將value轉換成INT(有符號的整數)格式
UNSIGNED將value轉換成INT(無符號的整數)格式
DECIMAL將value轉換成FLOAT(浮點數)格式
BINARY將value轉換成二進位制格式

範例

1.將值轉換為DATE資料型別

-- 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.將值轉換為DATETIME資料型別

-- 2022-04-27 00:00:00
SELECT CAST('2022-04-27' AS DATETIME); 

3.將值轉換為TIME資料型別

-- 14:06:10
SELECT CAST('14:06:10' AS TIME); 
-- 14:06:10
SELECT CAST('2022-04-27 14:06:10' AS TIME); 

4.將值轉換為CHAR資料型別

-- '150'
SELECT CAST(150 AS CHAR); 
 
-- 出錯Error
SELECT CONCAT('Hello World',437));
-- 'Hello World437'
SELECT CONCAT('Hello World',CAST(437 AS CHAR));

5.將值轉換為SIGNED資料型別

-- 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.將值轉換為UNSIGNED資料型別

-- 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.將值轉換為DECIMAL資料型別

-- 9
SELECT CAST('9.0' AS DECIMAL);
 
-- DECIMAL(數值精度,小數點保留長度)
-- DECIMAL(10,2)可以儲存最多具有8位元整數和2位小數的數位
-- 精度與小數位數分別為10與2
-- 精度是總的數位位數,包括小數點左邊和右邊位數的總和
-- 小數位數是小數點右邊的位數
-- 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));

練習案例

匯入資料 

DROP TABLE IF EXISTS `Material`;
CREATE TABLE `Material` (
  `ID` varchar(255) DEFAULT NULL,
  `Material` varchar(255) DEFAULT NULL,
  `FileName` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
INSERT INTO `Material` VALUES ('1', '07-100215-01', 'FD03-FCZ-220430012624541.txt');
INSERT INTO `Material` VALUES ('2', '07-100390-01', 'FD03-FCZ-210318012624541.txt');
INSERT INTO `Material` VALUES ('3', '07-1043-01', 'FD03-FCZ-170430012624541.txt');
INSERT INTO `Material` VALUES ('4', '07-1044-01', 'FD03-FCZ-191225012624541.txt');
INSERT INTO `Material` VALUES ('5', '07-1045-01', 'FD03-FCZ-200601012624541.txt');
INSERT INTO `Material` VALUES ('6', '07-1046-01', 'FD03-FCZ-180705012624541.txt');

Material表 

Material:料號  FileName:檔名稱(儲存相應料號位置)

註明: ID,Material,FileName都是VARCHAR型別 

FileName取值舉例說明:'FD03-FCZ-220430012624541.txt',紅色標註數位代表年月日,其餘都取值相同(不用考慮具體含義)

問題:查詢小於220401(整數型別年月日數值)的Material

SELECT Material
FROM (SELECT Material,(CAST(SUBSTRING(FileName,10,6)AS SIGNED))AS 'time'
      FROM Material
      WHERE 'time' < 220401)AS filter_material;

解題思路
利用SUBSTRING函數擷取FileName值中代表年月日的數位
由於FileName中的值為varchar型別,220401為整數型別,需要使用CAST函數進行型別轉換 

結果展示:

 到此這篇關於Mysql CAST函數的具體使用的文章就介紹到這了,更多相關Mysql CAST函數內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com