【问题标题】:Compare only day and month with date field in mysql仅将日期和月份与mysql中的日期字段进行比较
【发布时间】:2014-08-22 00:05:59
【问题描述】:

如何只比较日期和月份与mysql中的日期字段? 例如,我在一张表中有一个日期:2014-07-10

同样,另一个表中的另一个日期2000-07-10。 我只想比较日期字段上的日期和月份是否相等。

我试过这种格式。但我无法得到答案

select *
from table
where STR_TO_DATE(field,'%m-%d') = STR_TO_DATE('2000-07-10','%m-%d')
and id = "1"

【问题讨论】:

  • 您的SELECT 中不能有两个WHERE 子句。是不是打错字了?
  • k 我用未知添加它。实际上我想将日期和月份与日期字段进行比较。如何做到这一点

标签: mysql sql date select


【解决方案1】:

你可以使用DATE_FORMAT:

SELECT * FROM `table`
    WHERE DATE_FORMAT(STR_TO_DATE(`field`, '%Y-%m-%d'), '%d-%m') = DATE_FORMAT(STR_TO_DATE('2000-07-10','%Y-%m-%d'), '%d-%m')

第二个WHERE 也是无效的。无论如何,您不仅希望获得所有行 id=1

【讨论】:

  • 投反对票,因为它似乎更可靠/不太可能以某种方式破坏以比较日期的各个部分而不是转换为字符串。
  • @Azendale 我认为这与某事的可靠性或可能性无关。
【解决方案2】:

改用 DATE_FORMAT:

SELECT DATE_FORMAT('2000-07-10','%m-%d')

产量

07-10

这是用DATE_FORMAT() 重写的查询:

SELECT *
FROM table
WHERE DATE_FORMAT(field, '%m-%d') = DATE_FORMAT('2000-07-10', '%m-%d')
AND id = "1"

【讨论】:

  • 当然可以,但是如果可以避免,为什么要将日期转换为字符串以对后者执行比较?
  • 我的数据库中有 2 个表。我想在两个表上只选择日期和月份相等的记录,而不考虑年份
  • @John 这与我的评论有什么关系?
  • 是的,看看其他答案。显然,将日期转换为字符串进行比较只能是不赞成
  • @MarcusAdams 虽然字符串比较当然很好,但 OP 的 [第一个] 将日期转换为字符串以进行唯一比较的想法让我退缩了。
【解决方案3】:

您可以使用 DAYOFMONTHMONTH 函数来做到这一点:

SELECT *
FROM table
WHERE DAYOFMONTH(field) = 31 AND MONTH(field) = 12 AND id = 1;

编辑: 当然,如果您想比较两个字段,您也可以编写以下内容:

SELECT *
FROM table
WHERE 
    DAYOFMONTH(field) = DAYOFMONTH(field2) 
    AND MONTH(field) = MONTH(field2) 
    AND id = 1 ...;

更多信息请查看手册:

  1. MONTH
  2. DAYOFMONTH

【讨论】:

  • 不,我想比较两个表值。所以它在这里不起作用
  • SELECT * FROM table WHERE DAYOFMONTH(field) = DAYOFMONTH(field2) AND MONTH(field) = MONTH(field2) AND id = 1 ...;没错
【解决方案4】:

使用MONTHDAY 函数:

试试这个:

SELECT *
FROM tableA a 
WHERE a.id = 1 AND MONTH(a.field) = MONTH('2000-07-10') AND 
      DAY(a.field) = DAY('2000-07-10') 

【讨论】:

    猜你喜欢
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多