Лидирующий 0 в int Столбец проблема SQL Server - PullRequest
0 голосов
/ 05 октября 2018

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

SELECT 
    CASE 
        WHEN LEN(t.trans_time) = 5 
            THEN CONCAT(0, [trans_time])
            ELSE T.[trans_time] 
     END AS [TransactionTime]

     ,RIGHT(CONCAT(0,trans_time),6) AS trans_time

    ,LEN(T.trans_Time)

    ,t.trans_time

enter image description here

Почему оператор case не возвращает ведущий 0 при использовании:

,RIGHT(CONCAT(0,trans_time),6) AS trans_time

Не работает.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Еще один способ сделать это - использовать функцию форматирования, которая доступна на sql server 2012.
Это не только делает код более читабельным, но и будет работать лучше.

declare @t table (id int)
insert into @t values (90113), (90204), (90207), (90235), (90302), (90318), (90324)

select format(id, '000000') as TransactionTime from @t

thisвернется

TransactionTime 
---------------
090113  
090204  
090207  
090235  
090302  
090318  
090324  
0 голосов
/ 05 октября 2018

Выражение регистра возвращает только один тип, тогда как concat() будет возвращать другой тип, и я предполагаю, что trans_time имеет INT тип.

Итак, вам необходимо выполнить диалоги типа:

SELECT (CASE WHEN LEN(t.trans_time) = 5 
             THEN CONCAT(0, [trans_time])
             ELSE CAST(T.[trans_time]  AS VARCHAR(255))
         END) AS [TransactionTime],
. . .
...