【问题标题】:Convert varchar to datetime to sort date?将 varchar 转换为 datetime 以对日期进行排序?
【发布时间】:2019-07-05 02:42:03
【问题描述】:

我想尝试对日期进行排序,但有一些限制,因为这些列是 varchar。

现有数据

这是我测试的查询。

SELECT        PERIODE, RF, APPROVE_DATE
FROM            DLY_UPGRADE
WHERE        (SLP = '368') AND (CONVERT(datetime, APPROVE_DATE, 101) > '01/01/2017')

错误信息:

【问题讨论】:

  • 你为什么首先使用 varchar 来存储日期?

标签: php sql sql-server


【解决方案1】:

如果您使用的是 SQL Server,请尝试以下操作:

SELECT        PERIODE, RF, APPROVE_DATE
FROM            DLY_UPGRADE
WHERE        (SLP = '368') AND (CONVERT(date, APPROVE_DATE, 103) > '2017-01-01')

【讨论】:

    【解决方案2】:

    使用

     DATE_FORMAT(STR_TO_DATE(`APPROVE_DATE`, '%d/%m/%Y'), '%Y-%m-%d')
    

    从字符串中更改日期,然后与Y-m-d 格式进行比较

     SELECT        PERIODE, RF, APPROVE_DATE
     FROM            DLY_UPGRADE
     WHERE        (SLP = '368') AND (DATE_FORMAT(STR_TO_DATE(`APPROVE_DATE`, '%d/%m/%Y'), '%Y-%m-%d')) > '2017-01-01')
    

    【讨论】:

    • 感谢您对类似案例的帮助。 :)
    【解决方案3】:
    SELECT        PERIODE, RF, APPROVE_DATE, cast(PERIODE as datetime) as PERIODEDatetime
    FROM            DLY_UPGRADE
    WHERE        (SLP = '368') AND (CONVERT(datetime, APPROVE_DATE, 101) > '01/01/2017')
    order by PERIODEDatetime asc
    

    在这里,您可以将您的 varchar 转换为 datetime 并使用它在 asc/desc 中订购。 APPROVE_DATE 也是如此。

    【讨论】:

      【解决方案4】:

      您的转换问题似乎出现在WHERE 子句中。但是,在继续查询之前,我会使用TRY_CONVERT() 进行测试:

      select approve_date
      from dly_upgrade
      where slp = '368' and approve_date is not null and
            try_convert(date, approve_date, 103) is null;
      

      101 的样式为 MM/DD/YYYY,因此 '15/11/2016' 将失败,因为 15 不是有效月份。 103 是 DD/MM/YYYY,这似乎是你想要的。

      假设这在列中没有返回意外值,我建议:

      SELECT PERIODE, RF, APPROVE_DATE
      FROM  DLY_UPGRADE
      WHERE SLP = '368' AND
            TRY_CONVERT(datetime, APPROVE_DATE, 103) > '2017-01-01'
      ORDER BY ?  -- not sure if you want PERIOD or TRY_CONVERT(datetime, APPROVE_DATE, 103)
      

      【讨论】:

      • 谢谢我的问题已经解决了。我只需要用01-01-2017调整日期格式101代码
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      相关资源
      最近更新 更多