如何比较日期(年、月)和日期(日、月、年)

Posted

技术标签:

【中文标题】如何比较日期(年、月)和日期(日、月、年)【英文标题】:How to compare date(year, month) with date(day, month, year) 【发布时间】:2016-05-19 02:03:12 【问题描述】:

我有一个 sql 命令,我想检查日期(年、月)是否在日期(日、月、年)和日期(日、月、年)之间。以下是我的 SQL 命令:

SELECT *
FROM paytran
WHERE
    (StaffID BETWEEN '01' AND '01')
    AND STR_TO_DATE('01/04/2016', '%d/%m/%Y') BETWEEN STR_TO_DATE(DateFrom, '%d/%m/%Y') AND STR_TO_DATE(DateTo, '%d/%m/%Y')
    AND SubGroup = '1'
    AND Week1 = '1'
    AND PaymentMonth = STR_TO_DATE('2016/04', '%Y%m') BETWEEN STR_TO_DATE('01/03/2016', '%d/%m/%Y') AND STR_TO_DATE('31/12/2016', '%d/%m/%Y')
    AND FO = 'F'

mysql 没有给出错误,但结果不应为空。

【问题讨论】:

你确定SubGroup = ''` 不是错字吗? 是的,这是一个错字。哈哈,感谢您的编辑。我已经更改了 SubGroup 值 【参考方案1】:
SELECT * FROM TABLE_NAME
WHERE DATE_FORMAT(date, "%Y-%m") BETWEEN '2013-01' AND '2014-12';

https://***.com/a/17541196/3155780

【讨论】:

【参考方案2】:

嗯,这个版本似乎更简单:

SELECT *
FROM paytran
WHERE StaffID LIKE '01%' AND
      '2016-04-01' BETWEEN DateFrom AND DateTo AND
       SubGroup = '1' AND
       Week1 = '1' AND
       DATE_FORMAT(PaymentMonth, '%Y%m') BETWEEN '201604' and '201612' AND
       FO = 'F';

一般来说,您不需要将日期转换为字符串进行比较。如果需要日期,则会自动转换格式为 YYYY-MM-DD 的字符串。

【讨论】:

但是 201604 和 201612 实际上是基于数据库列,而 201604 实际上是 01/03/2016 而 201612 实际上是 31/12/2016。该命令也仍然无法正常工作。呵呵 @JohnsYong 。 . .他们不在你的问题中。当然,如果你喜欢在数据库列上,你仍然可以使用date_format() 无论如何,非常感谢您的帮助。非常感谢

以上是关于如何比较日期(年、月)和日期(日、月、年)的主要内容,如果未能解决你的问题,请参考以下文章

如何将日期(月/年)与另一个日期(月/年)进行比较

如何在C#中比较出生日期和当前日期

如何显示与当前日期相比的时差?

如何在javascript中比较两个字符串日期?

JAVA 日期排序

Access 中日期1998与1999哪个大?