【问题标题】:Get Weekday name from index number in MYSQL从MYSQL中的索引号获取工作日名称
【发布时间】:2015-10-02 13:46:45
【问题描述】:

我有一个存储 0-6 作为工作日值的表,我想显示工作日名称。例如。如果值为0,则显示Sunday,如果值为1,则显示Monday,同理。 是否有任何内置的 MySQL 函数用于从 Index 获取日期名称?

提前致谢!!

【问题讨论】:

  • 您可以在查询中使用 CASE 语句...CASE WHEN WEEKID = 0 THEN 'Sunday' END
  • 只需创建一个查找表并与之连接(以防没有相应的功能)

标签: mysql sql date


【解决方案1】:

正如@Aliminator 提到的,您可以使用DAYNAMEDATE

但是,如果您不想更改架构,这里有一个不错的技巧:

 SELECT DAYNAME(CONCAT("1970-09-20", dayIndex)) FROM your_table;

这是基于这样一个事实,即 1970-09-20 是星期日,21 日是星期一,依此类推。

【讨论】:

  • 你是个天才!谢谢!
  • 唯一的问题是 MySQL DAYOFWEEK 函数以 1 开头,而不是周日的 0。所以,你总是会做 -1 的数学运算。因为我是在 2018 年写这篇文章的,所以我建议你使用 2018-03-1x,其中 2018-03-11 是星期日。整个语句将是: SELECT DAYNAME(CONCAT('2018-03-1', dayIndex)) from your_table;
【解决方案2】:

DAYNAME( date_value ) 在 MySql 中可用;但是,这需要一个日期,而不是一个整数。因此,如果您有可用的日期,您可以使用DAYNAME(CURDATE())DAYNAME('2014-01-07') 等。

如果您只有表示工作日的 int,那么 CASE 语句可能是您最好的选择。

CASE WHEN 0 THEN 'Sunday' WHEN 1 THEN 'Monday' ..... ELSE '' END

【讨论】:

    【解决方案3】:

    Method 1:

    使用CASE 表达式。

    查询

    select *,
    case when weekid = 0 then 'Sunday'
    when weekid = 1 then 'Monday'
    when weekid = 2 then 'Tuesday'
    when weekid = 3 then 'Wednesday'
    when weekid = 4 then 'Thursday'
    when weekid = 5 then 'Friday'
    when weekid = 6 then 'Saturday'
    else null end as WeekName
    from your_table;
    

    Method 2:

    您可以创建一个用于存储周名称的表并使用JOIN 选择它。

    餐桌周名称

    create table tblWeekName
    (
        id int,
        weekName varchar(20)
    );
    
    insert into tblWeekName values
    (0,'Sunday'),(1,'Monday'),(2,'Tuesday'),
    (3,'Wednesday'),(4,'Thursday'),(5,'Friday'),(6,'Saturday');
    

    然后使用以下查询选择周名。

    select t1.*,
    t2.weekName 
    from your_table t1
    join tblWeekName t2
    on t1.weekid = t2.id;
    

    【讨论】:

      【解决方案4】:

      以前的答案有一个简化的变体 - 您可以在 CASE 语句中写一次您的列名以减少代码的长度。

      case tt.start_day_of_week 
      when 0 then 'Sunday'
      when 1 then 'Monday'
      when 2 then 'Tuesday'
      when 3 then 'Wednesday'
      when 4 then 'Thursday'
      when 5 then 'Friday'
      when 6 then 'Saturday'
      else null end
      

      【讨论】:

        【解决方案5】:

        我查看了 MySql 5.5 文档,并且在选择名为 DayName() 时有一个您可以使用的函数。不利的一面是您将需要使用 DateTime 变量,而不是 int。

        https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_dayname

        我建议更改您的架构以采用 DateTime,以便您可以使用 DayName() 和其他内置函数。

        【讨论】:

        • 不知道为什么要下注,@mbinette 在下面显示,比 case-switch 更省力。和!!!该函数负责数据库设置。在我的版本中,天数是 1-7,而 7 是星期六...
        【解决方案6】:

        您确定确实需要存储工作日的名称吗?如果您需要获取存储日期的星期几,请尝试使用 DATE_FORMAT(date,format)'%W''%w' 格式参数。见here

        【讨论】:

        • 在“星期日”重复?
        猜你喜欢
        • 2012-08-22
        • 2012-08-31
        • 2011-12-21
        • 1970-01-01
        • 1970-01-01
        • 2021-08-22
        • 2017-08-28
        • 2012-12-16
        • 1970-01-01
        相关资源
        最近更新 更多