【问题标题】:MYSQL - Date stored in different format dd-mm-yy - Cannot retrieve valuesMYSQL - 以不同格式存储的日期 dd-mm-yy - 无法检索值
【发布时间】:2018-04-23 10:41:28
【问题描述】:

我有一个包含以下值的表。

正如你在图片中看到的,日期不是以标准的mysql日期格式存储的。

它存储在 dd-mm-yy

我想选择 invoicedate 早于 20-09-2017 的行,因此它应该包含第 13-09-17 行。

我尝试了以下查询,但没有任何效果。

SELECT * 
FROM `invoices` 
WHERE date_format(invoicedate,'%d-%m-%Y') < date_format(20-09-17,'%d-%m-%Y')

【问题讨论】:

  • 最好将dd-mm-yyyy格式转为yyyy-mm-dd格式,并使用日期作为数据类型而不是char或varchar数据类型
  • 你能在日期检查中使用strtotime()吗stackoverflow.com/questions/5082261/…这对你有帮助

标签: mysql


【解决方案1】:

使用 2017 作为日期中的年份,并将日期用撇号括起来:

SELECT * 
FROM `invoices` 
WHERE date_format(invoicedate,'%d-%m-%Y') < date_format('20-09-2017','%d-%m-%Y');

【讨论】:

    【解决方案2】:

    在我这边date_format('20-09-2017','%d-%m-%Y') 的结果为空,这可能是你的原因。

    试试下面的(它在我身边很好用):

    SELECT * 
    FROM `invoices` 
    WHERE invoicedate < STR_TO_DATE('20-09-2017', '%d-%m-%Y');
    

    【讨论】:

    • @vSugumar 更新了我的答案,它在我身边工作正常,但不确定它是否在你身边工作
    • 返回表中的所有行
    • @vSugumar 这很奇怪,当我在我的电脑上测试时,它只返回指定日期之前的数据。
    【解决方案3】:
        SELECT * 
    FROM `invoices` 
    WHERE strtotime(invoicedate) < strtotime(20-09-17)
    

    【讨论】:

    • 这对你有帮助吗
    【解决方案4】:

    选择 * 来自invoices WHERE STR_TO_DATE(发票日期,'%d-%m-%Y')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      • 2020-02-29
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多