Tho*_*s R 59 sql sql-server concatenation
我有一个包含三个字段的表,FirstName,LastName和Email.
这是一些虚拟数据:
FirstName | LastName | Email
Adam West adam@west.com
Joe Schmoe NULL
Run Code Online (Sandbox Code Playgroud)
现在,如果我这样做:
SELECT CONCAT(FirstName, LastName, Email) as Vitals FROM MEMBERS
Run Code Online (Sandbox Code Playgroud)
Joe的Vitals为null,因为只有一个空字段.你是如何克服这种行为的?此外,这是MS SQL Server中的默认行为吗?
Ste*_*Mai 119
尝试
ISNULL(FirstName, '<BlankValue>') -- In SQL Server
IFNULL(Firstname, '<BlankValue>') -- In MySQL
Run Code Online (Sandbox Code Playgroud)
所以,
CONCAT(ISNULL(FirstName,''),ISNULL(LastName,''),ISNULL(Email,'')) -- In SQL Server
CONCAT(IFNULL(FirstName,''),IFNULL(LastName,''),IFNULL(Email,'')) -- In MySQL
Run Code Online (Sandbox Code Playgroud)
如果没有null问题会返回相同的东西(并且空字符串应为null).
小智 67
看着 CONCAT_WS
例如:
CONCAT_WS('',NULL,"TEST STRING","TEST STRING 2")
Run Code Online (Sandbox Code Playgroud)
产量
TEST STRINGTEST STRING 2
这比IFNULL
围绕一切建设更容易.您可以使用空字符串作为分隔符.
cha*_*adi 12
在mysql isnull不会工作一段时间.试试IFNULL(),
CONCAT(IFNULL(FirstName,''),IFNULL(LastName,''),IFNULL(Email,''))
Run Code Online (Sandbox Code Playgroud)
SELECT ISNULL(FirstName,'')+ISNULL(LastName,'')+ISNULL(Email,'') as Vitals FROM MEMBERS
Run Code Online (Sandbox Code Playgroud)
建议使用,但如果您真的迷上了CONCAT,请将其包装在{fn}中,您可以使用ODBC函数,如:
SELECT {fn CONCAT(ISNULL(FirstName,''), ISNULL(LastName,''), ISNULL(Email,''))} as Vitals FROM MEMBERS
Run Code Online (Sandbox Code Playgroud)
如果你需要第一个<space> last,但是当first first为null时,你可以这样做:
ISNULL(FirstName+' ','') + ISNULL(LastName,'')
Run Code Online (Sandbox Code Playgroud)
我在firstname上添加了可能为null的空格 - 这意味着只有FirstName有值时空间才能存在.
把它们放在一起,每个之间有一个空格:
RTRIM(ISNULL(Firstname+' ','') + ISNULL(LastName+' ','') + ISNULL(Email,''))
Run Code Online (Sandbox Code Playgroud)
您始终可以使用该CONCAT_NULL_YIELDS_NULL
设置..
只运行SET CONCAT_NULL_YIELDS_NULL OFF
然后所有null
连接将导致文本而不是null.
归档时间: |
|
查看次数: |
84101 次 |
最近记录: |