【发布时间】:2020-10-30 10:29:09
【问题描述】:
- 通过这种方式 -
SELECT TO_CHAR(NOW(), 'DAY');我可以获得星期几的名称(例如星期一)。 - 使用
SELECT dayofweek(NOW());,我可以获得星期几。 (例 1) -
问题:
如何将星期几名称转换为星期几号。 (例如星期一 -> 1)
SMTH like
TO_NUMBER('MONDAY', 'DAY'); --> 1(只是举例,不工作)
【问题讨论】:
SELECT TO_CHAR(NOW(), 'DAY'); 我可以获得星期几的名称(例如星期一)。SELECT dayofweek(NOW());,我可以获得星期几。 (例 1)TO_NUMBER('MONDAY', 'DAY'); --> 1(只是举例,不工作)【问题讨论】:
可能case 表达式是最简单的方法:
(case ?
when 'MONDAY' then 1
when 'TUESDAY' then 2
when 'WEDNESDAY' then 3
when 'THURSDAY' then 4
when 'FRIDAY' then 5
when 'SATDAY' then 6
when 'SUNDAY' then 7
end)
或者数组更简洁:
array_find(?,
array['MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY']
) + 1
【讨论】:
? 用于定义星期几的任何表达式或参数。
SELECT * FROM table dp where dp.end_day = array_find(array['MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY'], TO_CHAR(NOW(), 'DAY')); 但得到[Vertica][VJDBC](3457) ERROR: Function array_find(varchar[], varchar) does not exist, or permission is denied for array_find(varchar[], varchar)