SUBSTRING Пустые альтернативы значения - PullRequest
0 голосов
/ 14 мая 2018

У меня есть следующий запрос, который работает и выполняет то, что должен:

select 
SUBSTRING(LastName,2,1)
+SUBSTRING(LastName,3,1)
+SUBSTRING(LastName,5,1) 
+SUBSTRING(FirstName,2,1) 
+SUBSTRING(FirstName,3,1)
+replace(convert(varchar, DateOfBirth,101),'/','')
+CASE WHEN GenderID = '1' Then '1' WHEN GenderID = '2' Then '2' ELSE '9' END
from 
    Client

Однако, если какой-либо из SUBSTRINGS возвращает пустую строку, его необходимо заменить на 2. Например, если LastNameБонд, SUBSTRING (LastName, 5,1) должен вернуть 2.

Как кто-то может предположить, что это сделано?Я пытался избежать чего-то вроде этого:

select CASE WHEN SUBSTRING('James',5,1) = '' THEN '2' ELSE SUBSTRING('James',5,1) END

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

ПОПРОБУЙТЕ : Если вы хотите использовать IIF для SQL SERVER 2012 or +

SELECT IIF (SUBSTRING('James',6,1)='', '2', SUBSTRING('James',5,1))
0 голосов
/ 14 мая 2018

Я думаю, что это самый простой метод:

select (SUBSTRING(LastName + '22222', 2, 1) +
        SUBSTRING(LastName + '22222', 3, 1) +
        SUBSTRING(LastName + '22222', 5, 1)  +
        SUBSTRING(FirstName + '22222', 2, 1) +
        SUBSTRING(FirstName + '22222', 3, 1) +
        replace(convert(varchar(255), DateOfBirth, 101), '/', '') +
        (CASE WHEN GenderID IN ('1', '2') THEN GenderID ELSE '9' END)
       )
from Client;

Это просто добавляет достаточно '2' s к концу, чтобы быть уверенным, что substring() находит символ.

Примечаниедва других изменения.Я добавил параметр длины в varchar().Вы должны всегда использовать параметр длины, потому что длина по умолчанию зависит от контекста, что приводит к трудным для поиска ошибкам.Я также упростил логику для GenderId (предполагается, что GenderId является строкой).

0 голосов
/ 14 мая 2018

Вот один трюк:

SELECT
    LEFT(SUBSTRING(LastName, 2, 1) + '2', 1) AS first_part
FROM Client

Если вызов SUBSTRING вернет вывод пустой строки, то вызов LEFT вернет '2'.В противном случае LEFT('#2', 1) вернет номер из вызова на SUBSTRING (здесь я использую # для представления любого числа).

Как указал @dnoeth в своем комментарии, это решение будет работать, только еслидлина подстроки равна 1, что соответствует случаю вашего запроса / данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...