我有一个存储0-6作为工作日值的表,我想显示工作日名称。例如。如果值为0
,则会显示Sunday
,如果值为1
,则同时显示Monday
。
是否有任何内置的MySQL函数可以从索引获取日期名称?
先谢谢!!
答案 0 :(得分:6)
正如@Aliminator所提到的,您可以将DAYNAME
与DATE
一起使用。
但是,如果您不想更改架构,这里有一个非常好的黑客:
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()和其他内置函数。