首页 > 解决方案 > 如何从工作日名称中获取日期格式?

问题描述

工作日

Sunday=1
Monday=2
Tuesday=3
Wednesday=4
Thursday=5
Friday=6
Saturday=7

我有当前字符串

Saturdays at 13:35 PDT

我想把INSERT它放到一个DATETIME列中,让它的日期和时间只有这样:

     DATETIME
0000-01-01 13:35:00  //Sundays at 13:35 PDT
0000-01-02 13:35:00  //Mondays at 13:35 PDT
0000-01-03 13:35:00  //Tuesdays at 13:35 PDT
0000-01-04 13:35:00  //Wednesdays at 13:35 PDT
0000-01-05 13:35:00  //Thursdays at 13:35 PDT
0000-01-06 13:35:00  //Fridays at 13:35 PDT
0000-01-07 13:35:00  //Saturdays at 13:35 PDT

我考虑过使用以下

INSERT into TABLE(column) VALUES (STR_TO_DATE('Saturdays at 13:35', '%Ws at %H:%i'))

但它总是给我NULL价值,我也想将时区PDT更改为UTC,但我不知道如何使用 STR_TO_DATE()函数

标签: mysqlsql

解决方案


在工作日使用 aCASE可能会对此有所帮助。
然后CONCAT是时候了。

例子 :

SELECT 
CONCAT(
  case SUBSTRING(weekday_at_time, 1, LOCATE(' ',weekday_at_time)-1)
  when 'Sundays' then '0000-01-01 '
  when 'Mondays' then '0000-01-02 '
  when 'Tuesdays' then '0000-01-03 '
  when 'Wednesdays' then '0000-01-04 '
  when 'Thursdays' then '0000-01-05 '
  when 'Fridays' then '0000-01-06 '
  when 'Saturdays' then '0000-01-07 '
  end, 
  STR_TO_DATE(SUBSTRING(weekday_at_time,length(weekday_at_time)-4,5),'%H:%i')
) AS "DATETIME"
FROM (
  -- Sample data
  select 'Sundays at 14:45' as weekday_at_time
  union all select 'Saturdays at 13:35'
) AS Samples

在此处测试 SQL Fiddle

但这是假设您将其更新为 VARCHAR 列。

因为将“0000”年的日期时间戳转换为日期时间会产生不同的结果。

例如:

select cast('0000-01-01 13:35:00' as datetime) as dt

回报:

-0001-12-30T13:35:00Z

如果您要更新到 DATETIME,将年份更改为“1900”可能会更安全。在此处
测试 SQL Fiddle


推荐阅读