这似乎是一个简单的问题,但我似乎总是反对。
在SQL Server中连接两个(或更多)字段时,在字段之间添加空格,如:
SELECT Field1 + ' ' + Field2 FROM table
如果Field1
或Field2
可能是null
,那么我们可以使用ISNULL
将其转换为空字符串,但空间仍然存在。我解决这个问题的一种方法是在检查它是否为null
之前添加空格。然后修剪两端以允许字段中的空字符串。 E.g:
SELECT LTRIM(RTRIIM(ISNULL(Field1 + ' ','') + ISNULL(Field2, ''))) FROM Table
这会处理任一字段中的空字符串,但如果以这种方式连接的字段数超过2个则会变得很长。
有更简单的方法吗?
答案 0 :(得分:3)
更简单的方法:
SELECT COALESCE(Field1 + ' ' + Field2, Field1, Field2, '')
FROM Table
这也可以避免LTRIM
和RTRIM
更改字段。
但是对于我使用的更多字段:
SELECT SUBSTRING(ISNULL(' ' + Field1, '') + ISNULL(' ' + Field2, '')
+ ISNULL(' ' + Field3, '')
+ ISNULL(' ' + Field4, '')
+ ...
+ ISNULL(' ' + FieldN, ''), 2, 4000)
FROM Table
答案 1 :(得分:0)
我发现Aaron Bertrands answer对于使用NULLS和/或空字段的组合做类似的事情非常有帮助。对于我的解决方案,我最终得到了;
SELECT STUFF(COALESCE(' ' + NULLIF(RTRIM(LTRIM(a.address_line1)), ''), '') +
COALESCE(' ' + NULLIF(RTRIM(LTRIM(a.address_line2)), ''), '') +
COALESCE(' ' + NULLIF(RTRIM(LTRIM(a.address_line3)), ''), '') +
COALESCE(' ' + NULLIF(RTRIM(LTRIM(a.address_suburb)), ''), '') +
COALESCE(' ' + NULLIF(RTRIM(LTRIM(a.address_state)), ''), '') +
COALESCE(' ' + NULLIF(RTRIM(LTRIM(a.address_postcode)), ''), ''), 1, 1, '')
AS Address_Detail
这可能不是一种“更简单的方式”,但它可能会帮助您提供一些其他想法。