#sql #if-statement #substring #case
#sql #оператор if #подстрока #случай
Вопрос:
Я хочу создать новые столбцы в таблице, в которой в настоящее время есть два столбца: «dx» и «dxlength». Новые столбцы будут представлять собой подстроку символов из столбца «dx» на основе длины символов в «dx», которые можно найти в столбце «dxlength».
Например, если длина dxlength равна> = 3, то я хотел бы поместить первые три символа в столбец с именем «first3».
Я пытаюсь использовать оператор case when, но получаю несколько ошибок. Что мне нужно изменить в моем коде?
Я попытался использовать оператор case when. Смотрите пример кода ниже.
select
dx, dxlength,
case when dxlength >= 3 then substring('dx', 1, 3) as first3,
case when dxlength >= 4 then substring('dx', 1, 4) as first4,
case when dxlength >= 5 then substring('dx', 1, 5) as first5,
case when dxlength >= 5 then substring('dx', 5, 1) as fifth,
case when dxlength >= 6 then substring('dx', 6, 1) as sixth,
case when dxlength < 7 then '!' as seventh,
case when dxlength = 7 then substring('dx', 7, 1) as seventh
into
table2
from
table1
В таблице будет 7 дополнительных столбцов, содержащих подстроку символов в столбце «dx» на основе количества символов в «dx», которое можно найти в столбце «длина dx».
Комментарии:
1. Ваши
CASE
выражения не заканчиваются наEND
so, что является ошибкой. Также вашиdx
ссылки на столбцы вsubstring()
формуле заключаются в кавычки, поэтому они обрабатываются как строковый литерал. Нравится буквально словоdx
. Вместо:case when dxlength>=3 then substring(dx,1,3) END as first3,
2. в вашем скрипте отсутствует конец, пожалуйста, добавьте образец данных и желаемый результат techonthenet.com/sql_server/functions/case.php
3. Решено! Большое спасибо.