我有当前代码来构建地址字符串,如下所示:
addressStreet = "";
if(q1.addr1 != "") {
addressStreet = addressStreet & q1.addr1;
}
if(q1.addr2 != "") {
addressStreet = addressStreet & "<br>" & q1.addr2;
}
if(q1.addr3 != "") {
addressStreet = addressStreet & "<br>" & q1.addr3;
}
if(q1.addr4 != "") {
addressStreet = addressStreet & "<br>" & q1.addr4;
}
Q1
是查询所有列的位置。我试图在Sybase SQL查询中进行所有这些连接。这是我尝试过的示例:
DECLARE @AddressStreet VARCHAR(500)
SELECT
CASE
WHEN datalength(address1) > 0 THEN @AddressStreet + address1
WHEN datalength(address2) > 0 THEN @AddressStreet + address2
WHEN datalength(address3) > 0 THEN @AddressStreet + address3
WHEN datalength(address4) > 0 THEN @AddressStreet + address4
END AS AddressStr
FROM Info
WHERE recid = 1214
上面的查询产生了以下结果:
18 Wolf Street,
该结果不正确,因为address2
列具有以下值:Suite 408
。地址应如下所示:
18 Wolf Street,
Suite 408
有没有办法在Sybase SQL中获得所需的输出?谢谢。
答案 0 :(得分:1)
当您有CASE
语句时,将执行满足的第一个条件。因此,在您的情况下,address1
的长度大于0,因此@AddressStreet + address1
被执行,仅此而已。我对Sybase不太了解,无法知道可用的功能,但是您可以肯定尝试以下方法:
SELECT CASE WHEN datalength(address1) > 0 THEN address1 ELSE '' END +
CASE WHEN datalength(address2) > 0 THEN address2 ELSE '' END +
CASE WHEN datalength(address3) > 0 THEN address3 ELSE '' END +
CASE WHEN datalength(address4) > 0 THEN address4 ELSE '' END
AS AddressStr
FROM Info
WHERE recid = 1214
这在地址字段之间没有空格,因此,如果您希望它产生HTML换行符,则可能需要使用'<BR>' + address2
之类的东西。