如何从sql中的星期和日期中获取日期?

问题描述 投票:6回答:3

我同时在表中存储了星期编号及其对应的星期几(即星期一,星期二,星期三,.....)。以下代码应该从日期返回星期数,但我无法解决这个问题

select WEEKOFYEAR(CURDATE())

我的桌子:

RecordID|Record|WeekID|DayofWeek
--------------------------------
1       |text1 |43    |mon
2       |text2 |43    |tue
3       |text3 |44    |wed

所需的输出:

RecordID|Record|Date
--------------------------------
1       |text1 |2019/10/30
2       |text2 |2019/10/31
3       |text3 |2019/11/01

我想从它们中检索日期(假设当前年份)。是否有可能在sql中完成,还是只能在服务器端完成?*仅供参考的日期

mysql sql datetime
3个回答
3
投票

以下以下示例脚本可能会为您提供帮助。希望所有必要的值在您的数据库中都可用,并且您已将它们相应地传递给函数-

SELECT STR_TO_DATE('2013 10 Tuesday', '%X %V %W');

--2013 is the year value
--10 is the week number
--Tuesday is the day name

如果表中所有三个值都可用,并运行提供适当值的STR_TO_DATE函数-这将为您返回一个日期,例如-“ 2013-03-12”。

您可以检查以下脚本-

SELECT 
STR_TO_DATE(concat('2019',' ', WeekID,' ', DayofWeek), '%X %V %W') 
FROM (
    SELECT 1 RecordID, 'text1' Record, 43 WeekID,'mon' DayofWeek UNION ALL
    SELECT 2,'text2',43,'tue' UNION ALL
    SELECT 3,'text3',44,'wed'
)A;

您的最终查询应如下-

SELECT 
STR_TO_DATE(concat('2019',' ', WeekID,' ', DayofWeek), '%X %V %W') 
FROM your_table_name A;

注意:由于表中没有该值,因此2019年是固定的。如果可用,您也可以像使用其他列一样动态使用该列。


1
投票

您不能仅从星期数和星期几中获取日期,您也需要年份。


1
投票

您的问题尚不完全清楚。

我想你有专栏

  • [year具有类似2001的值
  • [WeekID具有类似36的值
  • [DayOfWeek,其值类似于tue

然后,您可以使用类似这样的表达式来获取DATE值。 MySQL在星期和工作日均具有date format strings

SELECT STR_TO_DATE (CONCAT(year, '/', week, '/', weekday), '%Y/%v/%a')

这里是小提琴。 https://www.db-fiddle.com/f/iGrnkM5WgWTVPxuqxfPxdK/0

但是请注意,周数的计算是遵守当地和国际标准的业务规则。请务必使用几个不同日历年的前几天测试日期,以确保您了解自己的情况。

You can read about the choices for week computation here。您使用WEEKOFYEAR()来获取星期数。对应于%v格式说明符。

© www.soinside.com 2019 - 2024. All rights reserved.