Создание столбцов с определенными символами в строке в зависимости от длины строки в SQL Server

#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. Решено! Большое спасибо.