我在尝试添加前导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
为什么case语句在使用时不返回前导0:
,RIGHT(CONCAT(0,trans_time),6) AS trans_time
工程没问题。
答案 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