我在oracle中尝试了以下查询
select cast(TO_DATE (cal.MONTH,'MM') AS varchar2(30)) as result
FROM JOBCONTROL_USER.ods_calendar_weeks cal
WHERE cal.YEAR NOT IN (0, 9999)
它以dd-mon-yy
格式给出结果。现在我只想从结果中mon
,如何在不使用to_char()
的情况下实现此目标?
答案 0 :(得分:1)
如果您要避免使用Oracle功能,并且月份编号作为varchar2
字段自行存储,那么您可以强制它:
select case cast(month as number)
when 1 then 'Jan'
when 2 then 'Feb'
when 3 then 'Mar'
when 4 then 'Apr'
when 5 then 'May'
when 6 then 'Jun'
when 7 then 'Jul'
when 8 then 'Aug'
when 9 then 'Sep'
when 10 then 'Oct'
when 11 then 'Nov'
when 12 then 'Dec'
end as mon
from ods_calendar_weeks cal
where cal.year not in (0, 9999);
但你必须指定语言;您无法将Oracle的月份转换为NLS日期语言。根据您的具体情况,这可能是奖金或问题。
我很想将这些转换放入查找表中并加入其中;或者将月份名称添加为表格中的单独列,作为11g中的虚拟列。
答案 1 :(得分:0)
select to_char(cal.Month,'month')
) AS result
FROM JOBCONTROL_USER.ods_calendar_weeks cal
WHERE cal.YEAR NOT IN (0, 9999);
这将给出月份。 to_char()是一个有两个参数的函数1.列名和2.月。列名是日期数据类型,因此我们必须将日期转换为字符数据类型,我们只需要月份,因此第二列将描述从日期中提取的内容。最后,结果显示为字符数据类型。如果年份既不是0也不是9999,则此查询将返回月份名称。
答案 2 :(得分:0)
您可以尝试这样的事情: -
SELECT EXTRACT(MONTH FROM CAST(TO_DATE (cal.MONTH,'MM') AS varchar2(30))) as RESULT
FROM JOBCONTROL_USER.ods_calendar_weeks cal
WHERE cal.YEAR NOT IN (0, 9999)
希望这会对你有所帮助。