SQL - 資料型態函數:初學者指南

你好,未來的SQL法師們!我很興奮能成為你們在SQL資料型態函數世界的導師。作為一個教了超過十年計算機科學的人,我可以告訴你們,精通這些函數就像在數據庫領域獲得了超能力。所以,讓我們捋起袖子,開始吧!

SQL - Datatype Functions

資料型態函數是什麼?

在我們深入細節之前,讓我們先了解一下我們要處理的是什麼。SQL資料型態函數是特殊的工具,幫助我們將數據從一種類型轉換為另一種類型,或者提取關於值資料型態的信息。把它們想像成可以將你的數據精準轉換成你所需要的魔法治愈術!

它們為什麼重要?

想像一下你正在烤蛋糕(請耐心聽我說,我保證這跟SQL有關!)。你有一些不同形態的原材料 - 液體在量杯中,固體在克裡。為了正確遵循配方,你經常需要在不同度量之間進行轉換。這正是資料型態函數在SQL中的作用 - 它們幫助我們轉換和操作數據,使其符合我們數據庫操作的“形式”。

常見的SQL資料型態函數

讓我們探討一些最常見的資料型態函數。我會為每一個提供範例,然後我們一起解析它們。

1. CAST()

CAST()函數就像是SQL世界中的變形者。它允許你將一個值從一種資料型態轉換為另一種。

SELECT CAST(25.65 AS INT) AS IntValue;

這個查詢將返回:

IntValue
25

這裡發生了什麼?我們將小數25.65轉換為整數。SQL順從地切掉了小數部分,留下了25。

2. CONVERT()

CONVERT()與CAST()類似,但它專門用於Microsoft SQL Server,並提供了一些額外的功能。

SELECT CONVERT(VARCHAR(10), GETDATE(), 101) AS USDateFormat;

這可能會返回:

USDateFormat
05/15/2023

在這個例子中,我們將今天的日期(GETDATE())轉換為VARCHAR(字符串),並具有特定的美國日期格式(101代碼為mm/dd/yyyy)。

3. COALESCE()

COALESCE()就像一個總是支持你的忠實朋友。它返回列表中第一個非空值。

SELECT COALESCE(NULL, NULL, 'Hello', NULL, 'World') AS FirstNonNull;

結果:

FirstNonNull
Hello

COALESCE()從左到右檢查每個值,並返回遇到的第一个非空值 'Hello'。

4. NULLIF()

NULLIF()是SQL中的調解者。它比較兩個表達式,如果它們相等,則返回NULL,否則返回第一個表達式。

SELECT NULLIF(10, 10) AS Result1, NULLIF(5, 10) AS Result2;

這給我們:

Result1 Result2
NULL 5

在第一種情況中,兩個值都是10,所以NULLIF()返回NULL。在第二種情況中,值不同,所以它返回第一個值,5。

實際應用

現在,讓我們看看這些函數在現實世界中的應用。

處理空值

想像一下你正在處理一個學生成績的數據庫,但有些成績是缺失的(NULL)。你想要計算平均成績,但空值會干擾你的計算。這就是COALESCE()派上用場的地方:

SELECT AVG(COALESCE(Grade, 0)) AS AverageGrade
FROM StudentGrades;

這個查詢將所有空成績替換為0,然後計算平均成績。這就像說,“如果成績缺失,我們現在假設它是0。”

數據清洗

假設你有一個包含混合資料型態的列,並且你想要提取僅數字值:

SELECT
OriginalValue,
CASE
WHEN ISNUMERIC(OriginalValue) = 1
THEN CAST(OriginalValue AS FLOAT)
ELSE NULL
END AS CleanedNumericValue
FROM MixedDataTable;

這個查詢檢查每個值是否為數字。如果是,它將其轉換為FLOAT。如果不是,它返回NULL。這就像有一台分類機器,從混合袋中的物品中挑出數字。

結論

這就是了,各位!我們已經穿越了SQL資料型態函數的土地,從變形的CAST()到忠實的COALESCE()。記住,這些函數是你們塑造和塑造數據以符合你們需求的工具。就像任何好的工匠一樣,你們越多練習使用這些工具,你們會越熟練。

當我們結束時,這裡有一個小SQL幽默給你們:為什麼數據庫管理員離開了他的妻子?她有太多的一對多關係!(我現在會自己出去。)

繼續練習,保持好奇心,在你們意識到之前,你們會像專家一樣進行資料 casting 和 converting。下次見,快樂的SQL時間!

Credits: Image by storyset