从MYSQL中的索引号获取工作日名称

时间:2015-10-02 13:46:45

标签: mysql sql date

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

先谢谢!!

6 个答案:

答案 0 :(得分:6)

正如@Aliminator所提到的,您可以将DAYNAMEDATE一起使用。

但是,如果您不想更改架构,这里有一个非常好的黑客:

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

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

答案 1 :(得分:2)

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;

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:1)

以前的答案有所减少-您可以在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

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

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

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

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

相关问题