【问题标题】:MySQL getting last month instead of specific weekMySQL 上个月而不是特定周
【发布时间】:2014-09-01 15:00:11
【问题描述】:

我有这部分 SQL 语句,我根据输入日期选择一周:

SELECT DATE_FORMAT(md.`mydate`, '%d.%m.%Y'),
...
DAYNAME(md.`mydate`) FROM `mydates` md
LEFT JOIN (SELECT * FROM `import` 
    WHERE `Zeitspanne` != 'Anwesenheit' 
    AND `Person` = '".mysql_real_escape_string($expName)."') g 
    ON (md.`mydate` =  STR_TO_DATE(g.`Datum`, '%d.%m.%Y') )
WHERE WEEK(md.`mydate`,1) = WEEK('".$getStart[2].$d.$getStart[1].$d.$getStart[0]."',1)
AND YEAR(md.`mydate`) = YEAR('".$getStart[2].$d.$getStart[1].$d.$getStart[0]."')";

现在我想选择上个月(在本例中为 9 月),而不是像这样选择用户特定的一周:

LEFT JOIN (
    SELECT * FROM `import` 
    WHERE `Zeitspanne` != 'Anwesenheit' 
    AND `Person` = '".mysql_real_escape_string($expName)."') g 
    ON (md.`mydate` =  STR_TO_DATE(g.`Datum`, '%d.%m.%Y') )
WHERE MONTH(md.`mydate`,1) = MONTH('".$getStart[2].$d.$getStart[1].$d.$getStart[0]."' - INTERVAL 1 MONTH)) 
AND YEAR(md.`mydate`) = YEAR('".$getStart[2].$d.$getStart[1].$d.$getStart[0]."' - INTERVAL 1 MONTH)";

...但它似乎不起作用。

【问题讨论】:

  • 你能发布一些数据让我们了解你想要什么
  • 为了更好地理解,我有这个小提琴,它可以选择员工一周的不同数据。 sqlfiddle.com/#!2/130d8e/1
  • 那是什么问题? sqlfiddle.com/#!2/130d8e/25
  • 就是这样。谢谢你。我忘记了 MONTH() 没有参数 1 或类似的东西。今天工作太多了。
  • 哦,好的,我会发布答案:)

标签: php mysql sql date datetime


【解决方案1】:

问题是您正在向 MONTH() 传递一个附加参数 我也不认为你需要在 YEAR 做一个间隔(但你可能想不确定)

WHERE MONTH(md.mydate,1) 更改为WHERE MONTH(md.mydate)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 2013-05-07
    • 1970-01-01
    • 2019-05-14
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多