SQL列int列问题前导0

时间:2018-10-05 08:51:30

标签: sql sql-server sql-server-2012

我在尝试添加前导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 :(得分:4)

大小写表达式仅返回一种类型,而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],
. . .

答案 1 :(得分:3)

执行此操作的另一种方法是使用格式函数,这可以从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

这将返回

TransactionTime 
---------------
090113  
090204  
090207  
090235  
090302  
090318  
090324