如何在一个声明的变量中连接地址?

时间:2019-04-04 10:46:48

标签: sql case sybase sybase-ase

我有当前代码来构建地址字符串,如下所示:

    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中获得所需的输出?谢谢。

1 个答案:

答案 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之类的东西。