Sql 如何执行返回“01-JAN-1900”的查询

Sql 如何执行返回“01-JAN-1900”的查询,sql,oracle,date,oracle11g,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是一个日期列,如果我只使用'01-JAN-1900'而不使用to_日期,我将得到一个错误“数据类型不一致:应为%s获得%s

我们正在使用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是一个日期列,如果我只使用'01-JAN-1900'而不使用to_日期,我将得到一个错误“数据类型不一致:应为%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

日期没有格式-它们是。如果希望日期具有格式,则需要将其转换为可格式化的数据类型,即字符串。当您使用的用户界面需要显示日期时,它将隐式地将其转换为字符串,Oracle使用NLS_date_FORMAT会话参数作为其默认格式

您可以使用以下方法更改此设置:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';
然后,您的查询或使用日期文字:

SELECT DATE '1900-01-01' FROM DUAL
将在UI显示时使用NLS_DATE_格式隐式格式化

或查询:

SELECT COALESCE( myDtColumn, DATE '1900-01-01' ) as myDt
FROM   your_table;
如果不想更改会话参数,请使用to_CHAR date_值“DD-MON-YYYY”:


从dual Imaged mind中选择“01-JAN-1900”。我不认为这是一个查询问题,我认为您得到了正确的日期,它们只是以2位数的年份显示,而不是4位数的年份。您可能需要查看用于运行查询的任何查询编辑器或工具的设置。当然,您可以将其转换为具有特定日期格式的字符串,但这似乎无法达到目的,您也可以像@GordonLinoff所说的那样选择字符串。你这么做是为了什么?这是更大查询的一部分吗?是的,这是更大查询的一部分。我刚刚在上面编辑了我的问题,格式MM表示月数,而不是月名。使用日期'01-01-1900'、'dd-MM-yyyy'或日期'01-JAN-1900'、'dd-MON-yyyy'、'nls\U date\u language=american'
SELECT TO_CHAR( COALESCE( myDtColumn, DATE '1900-01-01' ), 'DD-MON-YYYY' ) as myDt
FROM   your_table;