SQL CONCAT从表达式中删除零



我正在尝试不同的方法将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数据。在当时的部分中,您尝试重新调用字符串,在其他部分中尝试重新调用零件号。

希望这能帮助。。。

这是一个演示

最新更新