如何从工作日名称中获取日期格式?

pjngdqdw  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(279)

在星期几

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() 功能

h5qlskok

h5qlskok1#

使用 CASE 因为平日里可能会有帮助。
那么 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'年的datetimestamp转换为datetime可以得到不同的结果。
例如:

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

退货:

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

如果要更新到日期时间,将年份更改为“1900”可能更安全。
在这里测试sql fiddle

相关问题