我有当前的代码,构建地址的字符串,如下所示:
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中获得所需的输出?谢谢。
当您有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
等的东西。