Проверьте длину и добавьте соответствующий столбец

#sql #sql-server

#sql #sql-сервер

Вопрос:

У меня есть таблица с двумя столбцами. В зависимости от длины данных в одном столбце мне нужно присоединиться к следующему столбцу. Как я могу поступить с этим. У меня есть базовый SQL, но я не могу объединить столбцы вместе и отобразить оба данных в одной таблице.

Текущая таблица выглядит следующим образом :

      ID        Code
 ----------   ----------
    ST01         00
    ST0105       05
    ET2256       56
  

После запроса SELECT я хотел бы иметь

       ID        
 ----------   
    ST0100      
    ST0105      
    ET2256    
  

Как вы можете видеть, когда ST01 меньше 5 символов, мне нужно будет добавить к нему столбец Code. Когда длина идентификатора больше, мне не нужно добавлять. Как я могу достичь. База данных находится в рабочей стадии, и я не могу редактировать, потому что все старые приложения настроены и запущены. Но приложение, которое я создаю, использует 7-символьный формат. Поэтому я не могу редактировать таблицу. Мне нужно будет выполнить только оператор select.

 SELECT 
CASE ID
WHEN ((LEN(ID))<>5) THEN ID=(RTRIM(ID) LTRIM(Code))
FROM tblID
ORDER BY ID DESC
  

Комментарии:

1. Вы говорите, что меньше 5 символов, но вы сравниваете с unequal 5 , 6 также будут совпадать. Кроме того, не используйте = в случае: CASE WHEN a=b THEN a ELSE c END AS ID

2. Какова максимально возможная длина идентификатора? Всегда 6 букв?

3. @shree.pat18 Максимальное значение равно 7

Ответ №1:

Основываясь на вашем объяснении, я предполагаю:

 SELECT 
CASE 
WHEN ((LEN(ID))<5) THEN (RTRIM(ID) LTRIM(Code)) ELSE ID END AS ID
FROM tblID
ORDER BY ID DESC
  

Ваш синтаксис CASE был немного неточным, так же как и сравнение по длине ( <>5 vs <5 ).

Ответ №2:

Попробуйте это:

 SELECT 
          CASE 
             WHEN LEN(ID) < 6 THEN LEFT(ID   Code),6)
             ELSE ID
          END AS Code
FROM      tblID
ORDER BY  ID DESC;
  

Ответ №3:

Попробуйте это:

 SELECT 
    CASE 
        WHEN LEN(ID) <> 6 THEN SUBSTRING(ID, 1, 6-LEN(Code))   Code
        ELSE ID
    END as Code
FROM tblID
ORDER BY ID DESC;
  

Комментарии:

1. SUBSTRING() отсутствует аргумент. Кроме того, CONCAT() это функция 2012 года, и не похоже, что OP четко указал, какая версия используется

2. @MarkD С использованием 2005 MSSQL

3. Пожалуйста, смотрите пересмотренный запрос, который совместим с MSSQL 2005, выше.