最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQL數(shù)據(jù)類型轉(zhuǎn)換CAST詳解

 更新時(shí)間:2026年01月27日 09:49:26   作者:獨(dú)淚了無(wú)痕  
本文介紹了SQL中的CAST函數(shù),用于在不同數(shù)據(jù)類型之間進(jìn)行轉(zhuǎn)換,它在數(shù)據(jù)查詢、分析和跨系統(tǒng)數(shù)據(jù)交互中廣泛使用,通過(guò)CAST函數(shù),可以將字符串轉(zhuǎn)換為數(shù)字,日期轉(zhuǎn)換為特定格式,以及處理不同類型之間的轉(zhuǎn)換規(guī)則,感興趣的可以了解一下

前言

在 SQL 數(shù)據(jù)處理中,數(shù)據(jù)類型轉(zhuǎn)換是常見(jiàn)需求,尤其在跨系統(tǒng)數(shù)據(jù)交互時(shí)。在SQL的世界里,數(shù)據(jù)類型轉(zhuǎn)換是一個(gè)基礎(chǔ)且關(guān)鍵的操作,它貫穿于數(shù)據(jù)庫(kù)開發(fā)、管理與數(shù)據(jù)分析的各個(gè)環(huán)節(jié),深刻理解它們對(duì)于編寫高效、穩(wěn)定的SQL代碼至關(guān)重要。

一、概述

1.1 CAST 函數(shù)是什么

在實(shí)際操作中,我們常常需要在不同數(shù)據(jù)類型之間進(jìn)行轉(zhuǎn)換。比如,當(dāng)我們從用戶處獲取數(shù)據(jù)時(shí),用戶輸入的數(shù)據(jù)可能是字符串類型,但在數(shù)據(jù)庫(kù)中存儲(chǔ)時(shí),可能需要轉(zhuǎn)換為對(duì)應(yīng)的數(shù)值類型或日期類型。又或者在進(jìn)行數(shù)據(jù)查詢和分析時(shí),為了滿足特定的業(yè)務(wù)邏輯和計(jì)算需求,也需要對(duì)數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換。例如,在統(tǒng)計(jì)銷售數(shù)據(jù)時(shí),銷售金額可能存儲(chǔ)為字符串格式,但在進(jìn)行求和或平均值計(jì)算時(shí),就需要將其轉(zhuǎn)換為數(shù)值類型。

在數(shù)據(jù)處理的戰(zhàn)場(chǎng)上,CAST 函數(shù)堪稱是數(shù)據(jù)類型轉(zhuǎn)換的[瑞士軍刀]。作為 SQL 標(biāo)準(zhǔn)函數(shù),用于將一個(gè)數(shù)據(jù)類型的值轉(zhuǎn)換為另一個(gè)類型,它既能解決數(shù)值與字符的“跨界矛盾”,也能化解日期格式的“時(shí)空錯(cuò)亂”。這在處理不同類型的數(shù)據(jù)時(shí)非常有用,比如將字符串轉(zhuǎn)換為數(shù)字,或者將浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù)等。

1.2 CAST 函數(shù)的基本語(yǔ)法

CAST 函數(shù)的基本語(yǔ)法是這樣的:

CAST(expression AS data_type)
參數(shù)簡(jiǎn)要說(shuō)明
expression要轉(zhuǎn)換的原始表達(dá)式
AS用于分隔兩個(gè)參數(shù),在AS之前的是要處理的數(shù)據(jù),在AS之后是要轉(zhuǎn)換的數(shù)據(jù)類型。
data_type要轉(zhuǎn)換成的數(shù)據(jù)類型。數(shù)據(jù)庫(kù)不同,支持的數(shù)據(jù)類型不同,使用時(shí)需注意。
類型簡(jiǎn)要說(shuō)明格式
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 類型 (固定長(zhǎng)度的字符串)
NCHAR將 value 轉(zhuǎn)化為 NCHAR
SIGNED將 value 轉(zhuǎn)化為 SIGNED (有符號(hào)的 64 位整數(shù))
UNSIGNED將 value 轉(zhuǎn)化為 UNSIGNED (無(wú)符號(hào) 64 位整數(shù))
BINARY將 value 轉(zhuǎn)化為 BINARY (二進(jìn)制字符串)
DOUBLE將 value 轉(zhuǎn)化為 DOUBLE 類型
FLOAT將 value 轉(zhuǎn)化為 FLOAT 類型

舉個(gè)簡(jiǎn)單的例子,如果有一個(gè)字符串 '2026-01-23',想把它轉(zhuǎn)成日期類型,就可以這樣寫:

SELECT CAST('2023-01-01' AS DATE)

這在處理原始數(shù)據(jù)不是標(biāo)準(zhǔn)格式時(shí)特別有用,比如從文本文件導(dǎo)入數(shù)據(jù)后,需要把某些字段轉(zhuǎn)換成數(shù)值或者日期類型。它簡(jiǎn)單直接,但在使用過(guò)程中也有一些細(xì)節(jié)需要注意,特別是不同類型之間的轉(zhuǎn)換規(guī)則。如果轉(zhuǎn)換失敗(比如把 ABC 轉(zhuǎn)成整數(shù)),大多數(shù)數(shù)據(jù)庫(kù)會(huì)報(bào)錯(cuò),所以使用前最好確認(rèn)數(shù)據(jù)是可以安全轉(zhuǎn)換的。

二、CAST 的實(shí)戰(zhàn)場(chǎng)景

CAST 函數(shù)在 SQL 中有廣泛的應(yīng)用場(chǎng)景,主要包括以下幾個(gè)方法:

2.1 數(shù)據(jù)類型轉(zhuǎn)換

CAST 函數(shù)最常見(jiàn)的用法就是進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換,例如,我們有一個(gè)字符串類型的字段,但需要將其轉(zhuǎn)換為數(shù)字類型進(jìn)行計(jì)算,這就可以用 CAST 函數(shù)來(lái)實(shí)現(xiàn):

# 字符串轉(zhuǎn)整數(shù)
SELECT CAST('123' AS SIGNED);

# 字符串轉(zhuǎn)浮點(diǎn)型數(shù)字
SELECT CAST('123.456' AS FLOAT);

2.2 字符串轉(zhuǎn)換

除了數(shù)據(jù)類型的轉(zhuǎn)換,CAST 函數(shù)還可以用于字符串的轉(zhuǎn)換:

# 將當(dāng)前時(shí)間轉(zhuǎn)換成字符串類型
SELECT CAST(NOW() AS CHAR);

# 整數(shù)轉(zhuǎn)字符串
SELECT CAST(123 AS CHAR);

# 浮點(diǎn)數(shù)轉(zhuǎn)字符串
SELECT CAST(123.456 AS CHAR);

在進(jìn)行字符串轉(zhuǎn)換時(shí),需要注意目標(biāo)數(shù)據(jù)類型的長(zhǎng)度限制。如果轉(zhuǎn)換后的字符串長(zhǎng)度超過(guò)了目標(biāo)數(shù)據(jù)類型的長(zhǎng)度限制,可能會(huì)導(dǎo)致截?cái)噱e(cuò)誤。在這種情況下,可以使用LEFT函數(shù)來(lái)截取指定長(zhǎng)度的子字符串。

SELECT LEFT(CAST('He1lo,World' AS CHAR(5)), 5);

使用CAST函數(shù)時(shí)需要注意,不同數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)類型的寫法略有差異。例如,MySQL中用CHAR或VARCHAR,而SQL Server中常用NVARCHAR。

2.3 日期時(shí)間轉(zhuǎn)換

在 SQL 中,日期的格式有很多種,有時(shí)候需要將日期轉(zhuǎn)換為特定的格式,這時(shí)候可以嘗試轉(zhuǎn)換為 DATE、TIME、DATETIME 類型。CAST 函數(shù)可以用于日期的轉(zhuǎn)換,以滿足業(yè)務(wù)需求。例如我們有一個(gè)日期類型的字段,但需要將其轉(zhuǎn)換為另一種日期格式,這就可以用 CAST 函數(shù)來(lái)實(shí)現(xiàn):

# 將值轉(zhuǎn)換為TIME數(shù)據(jù)類型
SELECT CAST(NOW() AS time);
SELECT CAST('2026-01-25' AS time);
SELECT CAST('2026-01-25 10:30:00' AS time);

# 將值轉(zhuǎn)換為DATE數(shù)據(jù)類型
SELECT CAST(NOW() AS date);
SELECT CAST('2026-01-25' AS date);
SELECT CAST('2026-01-25 10:30:00' AS date);

# 將值轉(zhuǎn)換為DATETIME數(shù)據(jù)類型
SELECT CAST(NOW() AS datetime);
SELECT CAST('2026-01-25' AS datetime);
SELECT CAST('2026-01-25 10:30:00' AS datetime);

2.4 數(shù)值與字符的“變形記”

-- 字符串轉(zhuǎn)整數(shù)
SELECT CAST('123' AS INTEGER) AS string_to_int;

-- 字符串轉(zhuǎn)小數(shù)(指定精度)
SELECT CAST('123.45' AS DECIMAL(5,2)) AS string_to_decimal;

-- 科學(xué)計(jì)數(shù)法字符串轉(zhuǎn)浮點(diǎn)
SELECT CAST('1.23E+5' AS FLOAT) AS scientific_to_float;

-- 帶貨幣符號(hào)字符串轉(zhuǎn)數(shù)值(需數(shù)據(jù)庫(kù)支持)
SELECT CAST('$123.45' AS DECIMAL(10,2)) AS currency_to_decimal;

在 SQL 中,當(dāng)需要對(duì)存儲(chǔ)為字符串類型的數(shù)值字段進(jìn)行排序時(shí),直接使用 ORDER BY 會(huì)導(dǎo)致字典序排序而非數(shù)值排序。

SELECT CAST(123.456 AS DECIMAL(10, 2));

有時(shí)候我們會(huì)從日志或者其他系統(tǒng)中拿到類似 '100' 這樣的字符串,但實(shí)際想要做加減乘除操作,這時(shí)候就需要轉(zhuǎn)換成數(shù)字類型:

SELECT CAST('100' AS SIGNED)

如果字符串里有非數(shù)字字符,比如 '100元',那就會(huì)出錯(cuò)。所以在轉(zhuǎn)換之前可以用一些函數(shù)預(yù)處理,比如 TRIM() 或者正則表達(dá)式過(guò)濾掉非數(shù)字部分。

三、避坑指南

3.1 空字符陷阱

不同數(shù)據(jù)庫(kù)對(duì) CAST 函數(shù)的處理各有差異,例如 CAST('' AS DATE),MySQL 會(huì)直接報(bào)錯(cuò),PostgreSQL 返回?zé)o效日期錯(cuò)誤,Oracle 則會(huì)拋出異常。建議先用 CASE WHEN 過(guò)濾空值,或者結(jié)合COALESCE(NULLIF(column,''), '默認(rèn)值')處理。

3.2 精度丟失

將 DECIMAL 轉(zhuǎn) INT 會(huì)直接截?cái)嘈?shù),需預(yù)先用ROUND() 或者 CEILING()處理更安全。

四、總結(jié)

CAST 函數(shù)在數(shù)據(jù)處理和轉(zhuǎn)換中非常有用,尤其是在數(shù)據(jù)導(dǎo)入和報(bào)告生成時(shí),可以確保數(shù)據(jù)類型的正確性和一致性。

到此這篇關(guān)于SQL數(shù)據(jù)類型轉(zhuǎn)換CAST詳解的文章就介紹到這了,更多相關(guān)SQL 類型轉(zhuǎn)換CAST內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

砀山县| 修武县| 绥江县| 舒兰市| 西藏| 荃湾区| 襄汾县| 赤峰市| 灵山县| 高雄市| 莱芜市| 应城市| 惠州市| 延长县| 依兰县| 广安市| 泌阳县| 桓台县| 安福县| 滦南县| 喀喇沁旗| 灌阳县| 达拉特旗| 孟连| 乌兰县| 华阴市| 安吉县| 福州市| 盘锦市| 互助| 将乐县| 边坝县| 新郑市| 顺平县| 信宜市| 合作市| 远安县| 元朗区| 滁州市| 丽江市| 城固县|