DECLARE @X VARCHAR(3) = NULL
DECLARE @Y VARCHAR(10) = '123456789'
/* The datatype returned is similar to X, or the first expression*/
SELECT ISNULL(@X, @Y) ---> Output is '123'
/* The datatype returned is similar to Y, or to the value of highest precedence*/
SELECT COALESCE(@X, @Y) ---> Output is '123456789'
SELECT CASE ("column_name")
WHEN "expression 1 is not NULL" THEN "expression 1"
WHEN "expression 2 is not NULL" THEN "expression 2"
...
[ELSE "NULL"]
END
FROM "table_name";
在 SQLServer 中,ISNULL ()函数用另一个值替换 NULL 值。
select CountryName = ISNULL("columnname", 'INDIA') from Countries
DECLARE @x VARCHAR(3) = NULL
,@y VARCHAR(3) = NULL;
DROP TABLE IF EXISTS [dbo].[DataSource01];
SELECT ISNULL(10, 20) AS [C1]
,ISNULL(@x, 'text') AS [C2]
,ISNULL(@x, @y) AS [C3]
INTO [dbo].[DataSource01];
DROP TABLE IF EXISTS [dbo].[DataSource02];
SELECT COALESCE(10, 20) AS [C1]
,COALESCE(@x, 'text') AS [C2]
,COALESCE(@x, @y) AS [C3]
INTO [dbo].[DataSource02];
让我们检查每一列的 Nullable属性:
使用 COALESCE,我们只能将列的 NOT NULL属性设置为 Yes
当所有的输入都是非空的时候。
根据 SQL 标准,COALESCE表达式被翻译为:
CASE WHEN (<subquery>) IS NOT NULL THEN (<subquery>) ELSE 0 END
如果 WHERE 子句中子查询的执行结果不是
SQLServer 在 THEN 子句中第二次执行它。
换句话说,在这种情况下,它会执行两次
执行的结果是 NULL,而 SQLServer 不是
再次执行子查询,而是返回 ELSE 表达式
在使用子查询时,ISNULL 函数具有性能
优势。