以下是一些虚拟数据:
FirstName | LastName | Email
Adam West adam@west.com
Joe Schmoe NULL
现在,如果我执行以下操作:
SELECT CONCAT(FirstName, LastName, Email) as Vitals FROM MEMBERS
Joe的生命体征为null,因为有一个字段为null。如何克服这种行为?此外,这是否是MS SQL Server的默认行为?
FirstName | LastName | Email
Adam West adam@west.com
Joe Schmoe NULL
现在,如果我执行以下操作:
SELECT CONCAT(FirstName, LastName, Email) as Vitals FROM MEMBERS
Joe的生命体征为null,因为有一个字段为null。如何克服这种行为?此外,这是否是MS SQL Server的默认行为?
尝试
ISNULL(FirstName, '<BlankValue>') -- In SQL Server
IFNULL(Firstname, '<BlankValue>') -- In MySQL
CONCAT(ISNULL(FirstName,''),ISNULL(LastName,''),ISNULL(Email,'')) -- In SQL Server
CONCAT(IFNULL(FirstName,''),IFNULL(LastName,''),IFNULL(Email,'')) -- In MySQL
如果没有null的问题,它会返回相同的结果(在应该有null的地方返回空字符串)。
看看CONCAT_WS
例如:
CONCAT_WS('',NULL,"TEST STRING","TEST STRING 2")
生成
测试字符串测试字符串2
这比在所有内容周围构建IFNULL
更容易。您可以使用空字符串作为分隔符。
CONCAT_WS(separator,str1,str2,...)
示例:SELECT CONCAT_WS(',', 'apple', 'banana', 'orange');
-- 输出:'apple,banana,orange'
SELECT CONCAT_WS('-', '2020', '03', '16');
-- 输出:'2020-03-16'
- Dvir Berebi在MySQL中,isNull有时不起作用。尝试使用IFNULL()。
CONCAT(IFNULL(FirstName,''),IFNULL(LastName,''),IFNULL(Email,''))
SELECT ISNULL(FirstName,'')+ISNULL(LastName,'')+ISNULL(Email,'') as Vitals FROM MEMBERS
推荐使用,但如果您真的喜欢CONCAT,请将其包装在{fn }中,然后您就可以像这样使用ODBC函数:
SELECT {fn CONCAT(ISNULL(FirstName,''), ISNULL(LastName,''), ISNULL(Email,''))} as Vitals FROM MEMBERS
ISNULL(FirstName+' ','') + ISNULL(LastName,'')
RTRIM(ISNULL(Firstname+' ','') + ISNULL(LastName+' ','') + ISNULL(Email,''))
您可以始终使用CONCAT_NULL_YIELDS_NULL
设置。
只需运行SET CONCAT_NULL_YIELDS_NULL OFF
,然后所有null
连接将产生文本而不是null。
#1582 - Incorrect parameter count in the call to native function 'ISNULL'
您可以用COALESCE函数替换ISNULL函数:
CONCAT(COALESCE(FirstName,''),COALESCE(LastName,''),COALESCE(Email,''))
从 MS SQL Server 2012 开始,引入了 CONCAT 函数,并且 根据 MSDN 的说法。
空值会被隐式转换为空字符串。如果所有参数都是 null,则返回一个 varchar(1) 类型的空字符串。
因此,使用 CONCAT 而不需要 IsNull 就足够了。
CONCAT(FirstName, LastName, Email)
Stefan的答案是正确的。 要深入探究一下,您需要知道NULL与Nothing不同。Null表示值的缺失,或者换句话说,未定义。Nothing表示一个空字符串,它实际上是一个值。
未定义 + 任何内容 = 未定义
这是一个好的数据库小贴士!
SQL Server没有CONCAT
函数。
(更新:从MS SQL Server 2012开始,引入了CONCAT函数)
在默认的SQL Server行为中,NULL会通过表达式传播。
在SQL Server中,一个人会这样写:
SELECT FirstName + LastName + Email as Vitals FROM MEMBERS
SELECT ISNULL(FirstName, '') + ISNULL(LastName, '') + ISNULL(Email, '') as Vitals FROM MEMBERS