T SQL CAST a CASE Заявление - PullRequest
       6

T SQL CAST a CASE Заявление

1 голос
/ 02 марта 2020

Использование SQL Server 2014. Как я могу CAST результат оператора CASE? Мне нужно CAST к nvarchar (20)

Это мой код:

SELECT CASE 
        WHEN [AddressLine1] LIKE 'ABC%'
            THEN REPLACE([AddressLine1], 'ABC', '')
        WHEN [AddressLine1] LIKE 'SCHEME%'
            THEN REPLACE([AddressLine1], 'QWE,', '')
        WHEN [AddressLine1] LIKE 'SBLOCK%'
            THEN REPLACE([AddressLine1], 'QWE', '')
        WHEN [AddressLine1] LIKE 'QAZ%'
            THEN REPLACE([AddressLine1], 'QAZ', '')
        ELSE LTRIM(RTRIM([AddressLine1]))
        END AS cast(search_name AS nvarchar(20)) as search_name
from myTable;

Но я продолжаю получать сообщение об ошибке:

Incorrect syntax near 'search_name'.

Ответы [ 2 ]

2 голосов
/ 02 марта 2020

Вам нужно наложить весь результат дела.

SELECT cast(CASE 
        WHEN [AddressLine1] LIKE 'ABC%'
            THEN REPLACE([AddressLine1], 'ABC', '')
        WHEN [AddressLine1] LIKE 'SCHEME%'
            THEN REPLACE([AddressLine1], 'QWE,', '')
        WHEN [AddressLine1] LIKE 'SBLOCK%'
            THEN REPLACE([AddressLine1], 'QWE', '')
        WHEN [AddressLine1] LIKE 'QAZ%'
            THEN REPLACE([AddressLine1], 'QAZ', '')
        ELSE LTRIM(RTRIM([AddressLine1]))
        END as nvarchar(20))  AS search_name
from myTable;
0 голосов
/ 02 марта 2020

Вам нужно cast все выражение для ведения разговора:

Если вы хотите search_name в качестве поиска, вы можете использовать apply:

SELECT t.*, CAST(search_name AS NVARCHAR(20)) AS search_name 
FROM table t CROSS APPLY
     ( VALUES (CASE WHEN [AddressLine1] LIKE 'ABC%'
                    THEN REPLACE([AddressLine1], 'ABC', '')
                    WHEN [AddressLine1] LIKE 'SCHEME%'
                    THEN REPLACE([AddressLine1], 'QWE,', '')
                    WHEN [AddressLine1] LIKE 'SBLOCK%'
                    THEN REPLACE([AddressLine1], 'QWE', '')
                    WHEN [AddressLine1] LIKE 'QAZ%'
                    THEN REPLACE([AddressLine1], 'QAZ', '')
                    ELSE LTRIM([AddressLine1]) -- removed RTRIM()  
              END)
     ) tt(search_name);

. Кстати, вы можете искать по search_name, легко не нужно использовать подзапрос или избежать повторения case выражения.

Примечание: я удалил RTRIM(), так как SQL Server будет игнорировать правильные пробелы при сравнении строк.

...