SQL - 数据类型函数:初学者指南

你好,未来的SQL大师们!我很高兴能成为你们在这令人兴奋的SQL数据类型函数世界中的向导。作为一个教授计算机科学超过十年的人,我可以告诉你,掌握这些函数就像在数据库领域获得了超能力。那么,让我们卷起袖子,开始吧!

SQL - Datatype Functions

什么是SQL数据类型函数?

在我们深入细节之前,让我们先了解一下我们要处理的内容。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)。你想计算平均成绩,但NULL值会破坏你的计算。这时COALESCE()来拯救你了:

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

这个查询在计算平均值之前将所有NULL成绩替换为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幽默给你:数据库管理员为什么离开他的妻子?因为她有一对多的关系!(我现在自己出去吧。)

继续练习,保持好奇心,在你意识到之前,你将像专业人士一样进行数据转换和转换。下次见,祝你在SQL中快乐!

Credits: Image by storyset