【问题标题】:SQL Query to append date (month/day) values with zeroSQL 查询以零附加日期(月/日)值
【发布时间】:2019-05-28 02:20:52
【问题描述】:

我有一个这样的数据集:

year | month | day | cust_id |
2018    9       7    xyz001

数据集的问题是日期分为年、月和日。

当我使用 concat 年、月和日时,我得到以下结果:

date:
201897

但我想要这样的东西:

date:
20180907

也就是说,只要我们有单个数字,我想在月份和日期列中添加附加零,并单独保留两位数字的值。

我如何在 SQL 中做到这一点?

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。
  • 你用 mysqlathena (Presto) 标记了这个。您是否需要无需修改即可在两个数据库中运行的 SQL?

标签: mysql sql date amazon-athena presto


【解决方案1】:

一种方法是使用lpad()

SELECT concat(year, lpad(month, 2, '0'), lpad(day, 2, '0')) date
       FROM elbat;

但是,您应该修改该设计并仅使用日期/时间类型的列。

【讨论】:

    【解决方案2】:

    您可以在大多数数据库中使用如下逻辑转换为日期:

    select cast(concat(year, '-', month, '-', day) as date)
    

    有一个真实的日期可能就足够了。或者您可能希望使用适当的日期格式转换回字符串。例如,在 MySQL 中,您可以使用 date_format()

    【讨论】:

      【解决方案3】:

      试试这个。

      选择年 + ' ' + 月 + ' ' + 日

      【讨论】:

        【解决方案4】:

        在大多数 SQL 风格中,您可以使用 case 语句来应用逻辑(在这种情况下,将单个数字日期值前缀为 0):http://www.mysqltutorial.org/mysql-case-statement/

        例如

        select 
        Year,
        case
        when len(month) = 2 then month
        when len(month) = 1 then '0'+month else '' end as month,
        case 
        when len(day) = 2 then day
        when len(day) = 1 then '0'+day else '' end as day
        from table
        

        我希望这有助于展示如何构建案例语句,然后您可以将它们连接起来,如下所示:

        select 
        Year +
        case
        when len(month) = 2 then month
        when len(month) = 1 then '0'+month else '' end +
        case 
        when len(day) = 2 then day
        when len(day) = 1 then '0'+day else '' end +''+ as FullDate
        from table
        

        【讨论】:

          猜你喜欢
          • 2017-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-11
          • 1970-01-01
          • 2021-01-26
          • 2010-09-11
          • 1970-01-01
          相关资源
          最近更新 更多