什么是填充空值
在MSSQL中,有时候我们需要对某些栏位进行填充,这些栏位可能在数据录入过程中没有填写值,或者在查询时返回空值。对这些空值进行填充能够使数据更加完整,便于后续的数据处理和分析。
使用COALESCE函数填充空值
COALESCE函数可以接受多个参数,返回第一个不为空的值。我们可以使用COALESCE函数来填充空值。
语法
COALESCE (expression1, expression2, ...)
其中,expression1, expression2, ...表示要进行判断的表达式,可以是栏位名、常量或者子查询。
示例
假设我们有一张订单表,其中包含订单号(order_id)、下单日期(order_date)和完成日期(finish_date),其中完成日期可能为空值。
CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_date DATE NOT NULL,
finish_date DATE
);
INSERT INTO orders (order_id, order_date, finish_date)
VALUES (1, '2021-01-01', '2021-01-10'),
(2, '2021-01-02', NULL),
(3, '2021-01-03', '2021-01-12'),
(4, '2021-01-04', NULL),
(5, '2021-01-05', NULL),
(6, '2021-01-06', '2021-01-13');
现在我们需要查询订单完成日期(finish_date),并将其为空值的记录填充为下单日期(order_date)+14天。
SELECT order_id,
order_date,
COALESCE(finish_date, DATEADD(day, 14, order_date)) AS finish_date
FROM orders;
该查询结果如下:
order_id order_date finish_date
1 2021-01-01 2021-01-10
2 2021-01-02 2021-01-16
3 2021-01-03 2021-01-12
4 2021-01-04 2021-01-18
5 2021-01-05 2021-01-19
6 2021-01-06 2021-01-13
可以看到,空值被成功填充为订单日期+14天。
使用CASE语句填充空值
除了COALESCE函数外,我们还可以使用CASE语句来进行空值填充。
语法
CASE
WHEN expression1 THEN result1
WHEN expression2 THEN result2
...
ELSE default_result
END
其中,expression1, expression2, ...表示要进行判断的表达式,可以是栏位名、常量或者子查询。result1, result2, ...表示expression1, expression2, ...分别满足条件时的返回值。default_result表示所有expression都不满足时的默认返回值。
示例
以下是使用CASE语句进行空值填充的示例:
SELECT order_id,
order_date,
CASE
WHEN finish_date IS NULL THEN
DATEADD(day, 14, order_date)
ELSE
finish_date
END AS finish_date
FROM orders;
该查询结果与COALESCE函数示例中的结果相同。
使用UPDATE语句进行空值填充
除了在查询时填充空值,我们还可以使用UPDATE语句对空值进行填充。
语法
UPDATE table_name
SET column_name = new_value
WHERE condition
其中,table_name表示要更新的表的名称;column_name表示要更新的栏位名;new_value表示新的值;condition表示更新条件。
示例
以下是使用UPDATE语句进行空值填充的示例:
UPDATE orders
SET finish_date = DATEADD(day, 14, order_date)
WHERE finish_date IS NULL;
执行该语句后,订单表的空值已经被成功填充。
在INSERT INTO语句中填充空值
除了在查询时和更新时进行空值填充外,我们还可以在INSERT INTO语句中对空值进行填充。
语法
INSERT INTO table_name (column1, column2, ..., columnn)
VALUES (value1, value2, ..., valuen)
其中,table_name表示要插入数据的表名;column1, column2, ..., columnn表示要插入的栏位名;value1, value2, ..., valuen表示要插入的值。
示例
以下是在INSERT INTO语句中对空值进行填充的示例:
INSERT INTO orders (order_id, order_date, finish_date)
VALUES (7, '2021-01-07', COALESCE(finish_date, DATEADD(day, 14, order_date)));
在该示例中,我们在插入一条新记录时对finish_date进行了空值填充。如果原先的finish_date为空值,则使用订单日期+14天来进行填充。
结论
在MSSQL中,我们可以使用COALESCE函数、CASE语句、UPDATE语句和INSERT INTO语句来对空值进行填充。根据不同的需求,我们可以选择不同的方式来进行空值填充。