【问题标题】:MySQL DAYOFWEEK() in reverse?MySQL DAYOFWEEK() 反向?
【发布时间】:2016-09-16 22:46:53
【问题描述】:

我正在 MySQL 中寻找一种将整数 (0-6) 转换为星期几的方法,例如:

EXAMPLE_FUNCTION(3) = Wednesday.

DAYOFWEEK(date) 函数接受一个日期并为您提供一个数字 0-6,它对应于一周中的哪一天(0 = 星期日,6 = 星期六),所以我正在寻找它的反面。

【问题讨论】:

  • 这不是反向的。第一个int f(date),第二个string f(int)elt(w+1, ...) 工作。
  • 这将是一个非常简单的函数来编写自己...
  • @origamifreak2,我评论的第二部分呢?
  • @vp_arth 啊,我现在看到了,抱歉,正忙着查看和回复其他 cmets。那肯定行得通,谢谢。我希望有一个可以调用的原生 MySQL 函数,就像我的问题中的示例一样,但从目前的回复来看,似乎没有。

标签: mysql date dayofweek


【解决方案1】:
DROP FUNCTION IF EXISTS DAYNUMBER;
CREATE FUNCTION DAYNUMBER(s INT) RETURNS VARCHAR(10)
RETURN elt(s+1, 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');

测试:

SELECT DAYNUMBER(1)

输出“星期一”。

【讨论】:

  • 这太过分了。使用原生 SQL 函数,例如 ELT( n+1 'Sunday','Monday','Tuesday',...)
  • 我是 SQL 新手,所以我不知道该函数是否存在,但是是的,这是一种更好的方法。谢谢你提出来。我会更新我的答案。
  • daynumber(0) 应该返回 sunday 以与 dayofweek 一致
  • @vp_arth 知道了 mathmroales 和 vp_arth(以及 spencer7593),感谢您的帮助。我不知道可以创建自己的函数,也不知道存在 elt 函数,很高兴知道。
【解决方案2】:

DAYOFWEEK 函数在这里应该会有所帮助:https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_dayname

唯一的缺点是它需要一个日期作为输入,而不是天数。但这应该很容易解决。只需从您知道它在星期日的任意日期开始(例如 2016-01-03)。然后ADDDATE你的天数就可以了。现在您的日期与您的日期编号在同一天,因此您可以通过 DAYOFWEEK 函数运行该日期。

DAYNAME(ADDDATE("2016-01-03", :day))

通过运行以下示例亲自查看:

SELECT DAYNAME(ADDDATE("2016-01-03", "3")) # Wednesday
SELECT DAYNAME(ADDDATE("2016-01-03", "0")) # Sunday

【讨论】:

  • 谢谢,这个答案也有效,而且更短。唯一的小缺点是必须在 ADDDATE() 函数中使用该日期。
  • 你说得对,我觉得里面的那个日期有点不对劲。您可以将它包装在一个函数中(就像@mathmorales 所做的那样)以隐藏它,但仍然...... Tbh 这不是我通常留给mySql 的东西。我严格使用数据库进行数据存储和查询,并将所有业务逻辑保留在我的应用程序代码中。但是,嘿,我今天也学习了mysql中的函数和elt,谁知道它什么时候会派上用场;-)
猜你喜欢
  • 1970-01-01
  • 2014-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
  • 2011-01-11
相关资源
最近更新 更多