例如,我们有下表:
Address Line 1 | Address Line 2 | Address Line 3 | Town | Region | Postcode
有没有一种方法可以从中选择所有行,然后将该行作为一个字符串返回,例如
AddressLine1 + AddressLine 2 + AddressLine 3 etc.....
如果这是一个基本问题,我很抱歉,对 SQL 来说非常新
例如,我们有下表:
Address Line 1 | Address Line 2 | Address Line 3 | Town | Region | Postcode
有没有一种方法可以从中选择所有行,然后将该行作为一个字符串返回,例如
AddressLine1 + AddressLine 2 + AddressLine 3 etc.....
如果这是一个基本问题,我很抱歉,对 SQL 来说非常新
在 oracle 中我使用了 ||
Select AddressLine1 || ',' || AddressLine2 from address;
不同的数据库服务器中的语法会有所不同
对于 MS SQL,这是我将使用的:
SELECT ([Address Line 1] + ', ' + [Address Line 2] + ', ' + [Address Line 3] + ', '
+ Town + ', ' + Region + ', ' + Postcode) AS Address
FROM TableName
试试这个:(SQL Server)
请不要忘记使用 ISNULL()函数,如果它为空,它只会将列转换为 ''。如果您不这样做,如果任何一列为空,您的整行都将为空。
select isnull([Address Line 1],'')+' '+
isnull([Address Line 2],'')+' '+
isnull([Address Line 3],'')+' '+
isnull(Town,'') +' '+
isnull(Region,'') +' '+
isnull(Postcode,'')
from <table>
对于 MySQL,您应该使用该CONCAT()
函数,因此:
SELECT CONCAT( AddressLine1, ', ', AddressLine2, ', ', AddressLine3, ', ', Town, ', ', Region, ', ', Postcode ) AS LongAddress
FROM ADDRESSES;
但是如果你想避免', '
在每个字段之间添加,你应该使用CONCAT_WS()
:
SELECT CONCAT_WS( ', ', AddressLine1, AddressLine2, AddressLine3, Town, Region, Postcode ) AS LongAddress
FROM ADDRESSES;
我实现了 SQL-Server 2008 标记,但仅供参考,SQL Server 2012 实现了 CONCAT 函数,因此您可以执行诸如 CONCAT (AddressLine1, ',' , AddressLine2) 之类的操作。一件好事是,该函数将 NULLS 视为空字符串,因此 SQL 2012 上不再存在“Joe G Joseph”担忧 :)