mysql - 重写mySQL语句

标签 mysql formatting

SELECT DATE(STR_TO_DATE(CONCAT(CONCAT(YEAR('$uDate1'), week), ' Monday'), '%X%V %W') + 
    INTERVAL (7 - DAYOFWEEK(STR_TO_DATE(CONCAT(CONCAT(YEAR('$uDate1'), week), ' Monday'), 
    '%X%V %W'))) DAY)
     as week_end_date

此语句的作用是获取我给出的日期 ($uDate1) 并给出该周的周末结束日期 (星期六)。这效果很好,我对此很满意。

我想知道是否有一些我错过的事情可以提高效率,或者即使我错过了一些捷径。

对我有什么建议吗?

<小时/>
week >= WEEK('$uDate1') AND week <= WEEK('$uDate2')

这是在我的 WHERE 子句中。所以基本上如果我使用这个...

DATE('$uDate1', INTERVAL 7 - DAYOFWEEK('$uDate1') DAY)

...然后它返回所有记录的同一天。我需要它能够持续几周的时间。

<小时/>

我的数据库中有一个名为“week”的列。它只是存储一个对应于一年中的星期的 INT。 (例如本周 21)

然后我有两个日期选择器框。输出获取基于 BETWEEN 和 INCLUDES 所选日期之间的每周的周末日期。

2016年5月10日和2016年5月26日输出2016年5月14日、2016年5月21日、2016年5月28日

导出到 CSV 文件的内容看起来像这样..

WEEK END, LAST NAME, FIRST NAME, ...
5/10/2016, Smith, John, ...
5/26/2016, Jones, James, ...

它会输出本周有工作时间的任何人以及周末结束日期。

旁注:我非常感谢您的评论和帮助。但我不希望任何人为此感到压力!只是好奇是否有更好的方法。 :)

最佳答案

我不知道为什么你当前的 SQL 如此复杂。

你说这只是约会并告诉我该周的周末结束日期(星期六)

您目前的做法是:-

  • 你的这一年即将到来
  • 添加一年中的第几周(我认为 - 应该是 WEEK('$uDate1'))
  • 将日期添加为字符串(例如今天为2016 21 Monday)
  • 将该字符串更改回日期或日期时间值
  • 将该日期时间值转换回日期。
  • 然后再次计算年份
  • 再次添加一年中的第几周
  • 获取结果字符串的星期几。由于您已将星期一连接到日期,因此星期几将始终为 2。
  • 将得到的星期几从 7 中减去。由于星期几始终为 2,因此结果始终为 5
  • 将日期添加为字符串(例如今天为 2016 21 Monday )。
  • 然后将该值添加到之前计算的日期中,即星期一日期加上 5 天。

我的建议是只使用:-

DATE_ADD($uDate1, INTERVAL 7 - DAYOFWEEK($uDate1) DAY) 

这要简单得多,并且似乎可以满足您的要求。

编辑

查看您的编辑,您需要一个包含 2 个过去日期之间全部或部分星期数的所有星期六的列表。

如果是这样,我认为下面的方法可以做到这一点,并且希望效率更高,因为不需要将日期与字符串相互转换。请注意,它依赖于您的周表来添加日期,因此只能处理最多几周的日期范围。

SELECT DATE_ADD(DATE_ADD('$uDate1', INTERVAL 7 - DAYOFWEEK('$uDate1') DAY), INTERVAL `week` WEEK) AS aDate
FROM `week`
HAVING aDate  BETWEEN '$uDate1' AND DATE_ADD('$uDate2', INTERVAL 7 - DAYOFWEEK('$uDate2') DAY)
ORDER BY aDate

关于mysql - 重写mySQL语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37441461/

相关文章:

带有 pyodbc 的 Python 字典

c# - 大写的UTF-8?

mysql - 将文本文件内容插入到mysql的列中

mysql - mysql 数据库连接过多

mysql - 物化路径按日期+路径排序

python - Jupyter/IPython Notebook 文本编辑为 markdown

javascript - 居中和调整内容

c++ - Printf 和十六进制值

python - Django:如何在不知道有多少信息可用的情况下很好地格式化模板中的地址?

mysql - 查询是否正确