我正在尝试不同的方法将0放在小于10的月份前面。
我尝试了以下表达式,但0被删除。
我做错了什么?
CASE
WHEN month([Transact_Date]) < 10
THEN CONCAT(str(0),STR(month([Transact_Date]),1))
ELSE month([Transact_Date])
END AS month_w_0
谢谢!
Tom
我认为左填充技巧正是您想要的。假设您的数据库是SQL Server:
SELECT RIGHT('00' + STR(MONTH([Transact_Date])), 2) AS month_w_0
FROM yourTable;
对此,您不需要CASE
表达式。在SQL Server的较新版本中,FORMAT
函数可能也能够处理此问题。
我已经测试过了,它会返回您想要的结果:
select CASE WHEN mnt < 10 THEN
concat('0' , mnt)
ELSE mnt
END AS month_w_0
from ( select month([Transact_Date]) mnt
from test_t) A
我已经意识到你的问题是什么。你也可以这样做:
SELECT
CASE
WHEN month([Transact_Date]) < 10
THEN CONCAT(str(0),STR(month([Transact_Date]),1))
ELSE STR(month([Transact_Date]),1)
END AS month_w_0
from test_t
问题只是其他部分,我相信这是因为case when子句只返回一种类型的od数据。在当时的部分中,您尝试重新调用字符串,在其他部分中尝试重新调用零件号。
希望这能帮助。。。
这是一个演示