我有一个星期几的字符串表示形式(即1、2、3、4、5、6和7),作为表中的一个字段。从这些,我想使用oracle SQL在不使用case语句的情况下输出日期的名称(如星期一,星期二等)。有人有主意吗?
答案 0 :(得分:1)
您可以执行以下操作:
WITH day_map AS (SELECT TO_CHAR(SYSDATE+LEVEL, 'FMD') id
, TO_CHAR(SYSDATE+LEVEL, 'FMDay') name
FROM dual
CONNECT BY LEVEL < 8)
SELECT m.NAME
FROM <YOUR_TABLE> t
LEFT JOIN day_map m
ON m.id = t.<day_of_week>
答案 1 :(得分:1)
我认为case
可能是最简单的解决方案:
select (case dow when '1' then 'Monday' when '2' then 'Tuesday' when '3' then 'Wednesday'
when '4' then 'Thursday' when '5' then 'Friday' when '6' then 'Saturday'
when '7' then 'Sunday'
end)
这可能不像转换为日期那样花哨,但您可以准确地得到所需的字符串,而不必费心日期算术。
如果要进行日期算术,请使用trunc()
:
select to_char(trunc(sysdate, 'IW') + dow - 1, 'Dy')
注意:这会产生一天的缩写。如果您需要完整的星期几名称,请使用'Day'
。
这会将当前日期截断为ISO星期的开始,该日期从星期一开始。
答案 2 :(得分:0)
因为20190106是星期天,您可以使用它,将20190106替换为其他任何星期日:
但是IMO,您最好使用B
编写一个函数,并返回结果以获得更好的性能
CASE