Как объединить адреса в одну объявленную переменную? - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть текущий код, который создает строку адресов, как это:

    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 Ответ

1 голос
/ 04 апреля 2019

Если у вас есть оператор 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

Это не будет иметь пробелов между полями адреса, поэтому вы можете захотеть иметь что-то вроде '<BR>' + address2 и т. Д., Если вы хотите, чтобы это приводило к разрывам строк HTML.

...