如何进行查询以返回“ 01-JAN-1900”

时间:2019-01-17 21:56:17

标签: sql oracle date oracle11g

我们正在使用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

1 个答案:

答案 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;