我们正在使用Oracle 11。 以下两个查询均返回01-JAN-00
SELECT to_date('01-JAN-1900','dd-MM-yyyy') FROM DUAL
SELECT to_date('01-JAN-1900','dd-MM-RRRR') FROM DUAL
如何查询返回“ 01-JAN-1900”的查询?
我需要执行以下查询(myDtColumn是Date列),如果我仅使用“ 01-JAN-1900”而不使用to_date,则会收到错误消息“数据类型不一致:预期的%s得到了%s”
case when myDtColumn is null then to_date('01-JAN-1900','dd-MM-yyyy') else
myDtColumn end as myDt
当我尝试以下操作时,我仍然收到'01 -JAN-00'而不是'01 -JAN-1900'
case when myDtColumn is null then DATE '1900-01-01' else
myDtColumn end as myDt
答案 0 :(得分:5)
日期没有格式-它们是represented internally by 7 or 8 bytes。如果您希望日期具有格式,则需要将其转换为可以格式化的数据类型(即字符串)。当您使用的用户界面需要显示日期时,它将隐式地将其转换为字符串,并且Oracle使用NLS_DATE_FORMAT
会话参数作为其默认格式。
您可以使用以下方法对此进行更改:
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';
然后您进行查询,或者使用日期文字:
SELECT DATE '1900-01-01' FROM DUAL
当用户界面显示它们时,将使用NLS_DATE_FORMAT
隐式格式化它们。
或针对您的查询:
SELECT COALESCE( myDtColumn, DATE '1900-01-01' ) as myDt
FROM your_table;
如果您不想更改会话参数,请使用TO_CHAR( date_value, 'DD-MON-YYYY' )
:
SELECT TO_CHAR( COALESCE( myDtColumn, DATE '1900-01-01' ), 'DD-MON-YYYY' ) as myDt
FROM your_table;