【问题标题】:My SQL to get String from DateMysql从日期获取字符串
【发布时间】:2018-07-18 14:02:24
【问题描述】:

我正在尝试在 sql 查询中从一个日期范围构造一个字符串,以创建另一个列来表示该天所属的一周中的星期一,即创建以下内容:

salesDate   mondayText
13/11/17    Mon 13 Nov
14/11/17    Mon 13 Nov
15/11/17    Mon 13 Nov
16/11/17    Mon 13 Nov
17/11/17    Mon 13 Nov
18/11/17    Mon 13 Nov
19/11/17    Mon 13 Nov
20/11/17    Mon 20 Nov
21/11/17    Mon 20 Nov
22/11/17    Mon 20 Nov
23/11/17    Mon 20 Nov
24/11/17    Mon 20 Nov
25/11/17    Mon 20 Nov
26/11/17    Mon 20 Nov

我尝试了以下方法,但似乎有点矫枉过正:

CONCAT(LEFT(DAYNAME(STR_TO_DATE(CONCAT(YEAR(`order_date`),LPAD(WEEKOFYEAR(`order_date`),2,'0'),' ','Monday'), '%X%V %W')),3),' ',
            EXTRACT(DAY FROM (`order_date` - INTERVAL WEEKDAY(`order_date`) Day)),' ',
    LEFT(MONTHNAME(STR_TO_DATE(CONCAT(YEAR(`order_date`),LPAD(WEEKOFYEAR(`order_date`),2,'0'),' ','Monday'), '%X%V %W')),3)) AS mondayText

当几周跨越几个月时,这会导致问题。有人有什么想法吗?

【问题讨论】:

标签: mysql sql


【解决方案1】:

假设您的 salesDate 列是字符串并且具有以下格式 - dd/MM/YY。您可以简单地使用MySQL datetime functions,

  • DATE_FORMAT
  • STR_TO_DATE
  • 子日期
  • 工作日

例子

DATE_FORMAT(SUBDATE(STR_TO_DATE(salesDate,'%d/%m/%y'), WEEKDAY(STR_TO_DATE(salesDate,'%d/%m/%y'))), '%a %d %b')

这是Demo。

但是,如果列的数据类型已经是DATETIME,则不必使用STR_TO_DATE。

Demo 2.

【讨论】:

  • 太棒了,谢谢,现在完全明白了,这是完全错误的方式!
猜你喜欢
  • 2016-06-24
  • 2020-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多