【问题标题】:SQL CONCAT drops zeros from expressionSQL CONCAT 从表达式中删除零
【发布时间】:2020-07-24 06:09:13
【问题描述】:

我正在尝试不同的方法将 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

谢谢!

汤姆

【问题讨论】:

标签: sql concat


【解决方案1】:

我认为左填充技巧是您想要的。假设您的数据库是 SQL Server:

SELECT RIGHT('00' + STR(MONTH([Transact_Date])), 2) AS month_w_0
FROM yourTable;

您不需要CASE 表达式。在较新版本的 SQL Server 中,FORMAT 函数也可能能够处理此问题。

【讨论】:

    【解决方案2】:

    我已经对此进行了测试,它会返回您想要的结果:

    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
    

    问题只是 else 部分,我相信这是因为 case when 子句只返回一种类型的 od 数据。在您的 then 部分中,您尝试在 else 部分中 retunr 字符串。

    希望这会有所帮助...

    Here is a demo

    【讨论】:

      猜你喜欢
      • 2010-09-16
      • 2012-05-31
      • 1970-01-01
      • 2012-03-30
      • 2020-07-20
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多