Как получить формат DATE из названия дня недели? - PullRequest
0 голосов
/ 28 августа 2018

В Дни недели

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

1 Ответ

0 голосов
/ 28 августа 2018

Использование 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' к дате и времени может дать другой результат.

Например:

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

Возвращает:

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

Изменение года на «1900» может быть безопаснее, если вы обновляете DATETIME.
Тест по SQL Fiddle здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...