我们在数据库中存储时间字段时,偶尔会出现为了方便写入或者展示的原因使用了varchar字段对时间进行存储,今天我们来讲解如何对字符串时间字段返回星期。
用到的函数:DAYOFWEEK
使用示例:
SELECT
execute_time
FROM
user_logs
ORDER BY
execute_time DESC
LIMIT 10;
现在获取的字段为“2024年01月09日00时42分04秒”
我们需要对它切片后再进行星期的返回:
SELECT
SUBSTRING(execute_time, 1, 11) as execute_date,
DAYOFWEEK(STR_TO_DATE(SUBSTRING(execute_time, 1, 11), '%Y年%m月%d日')) as `星期时间`
FROM user_logs
GROUP BY execute_date
ORDER BY execute_date DESC
limit 10;
我们通过SUBSTRING函数对字符串切片,再通过STR_TO_DATE函数把字符串转为时间类型。
这样,我们已经能获取到了日期对应的星期。
当然,我们需要注意,这样直接返回的星期,1代表周日,2代表周一,3代表周二,以此类推。不符合我们常规习惯,我们可以再进行优化下:
SELECT
SUBSTRING(execute_time, 1, 11) as execute_date,
CASE DAYOFWEEK(STR_TO_DATE(SUBSTRING(execute_time, 1, 11), '%Y年%m月%d日'))
WHEN 1 THEN '星期日'
WHEN 2 THEN '星期一'
WHEN 3 THEN '星期二'
WHEN 4 THEN '星期三'
WHEN 5 THEN '星期四'
WHEN 6 THEN '星期五'
WHEN 7 THEN '星期六'
END as `星期时间`
FROM user_logs
GROUP BY execute_date
ORDER BY execute_date DESC
limit 10;
现在,返回的日期就符合我们日常使用的形式了。