fau*_*ong -2 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
Run Code Online (Sandbox Code Playgroud)
如何进行返回'01 -JAN-1900'的查询?
我需要做下面的查询(myDtColumn是一个Date列),如果我只使用不带to_date的'01 -JAN-1900',我会得到错误'不一致的数据类型:期望%s得到%s'
case when myDtColumn is null then to_date('01-JAN-1900','dd-MM-yyyy') else
myDtColumn end as myDt
Run Code Online (Sandbox Code Playgroud)
当我尝试以下时,我仍然得到'01 -JAN-00'而不是'01 -JAN-1900'
case when myDtColumn is null then DATE '1900-01-01' else
myDtColumn end as myDt
Run Code Online (Sandbox Code Playgroud)
日期没有格式 - 它们在内部由7或8个字节表示.如果您希望日期具有格式,则需要将其转换为可以格式化的数据类型(即字符串).当您使用的用户界面需要显示日期时,它将隐式将其转换为字符串,Oracle使用NLS_DATE_FORMAT会话参数作为其默认格式.
你可以改变这个:
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';
Run Code Online (Sandbox Code Playgroud)
那么你的任何一个查询,或使用日期文字:
SELECT DATE '1900-01-01' FROM DUAL
Run Code Online (Sandbox Code Playgroud)
将使用NLS_DATE_FORMATUI显示它们时隐式格式化.
或者您的查询:
SELECT COALESCE( myDtColumn, DATE '1900-01-01' ) as myDt
FROM your_table;
Run Code Online (Sandbox Code Playgroud)
如果您不想更改会话参数,请使用TO_CHAR( date_value, 'DD-MON-YYYY' ):
SELECT TO_CHAR( COALESCE( myDtColumn, DATE '1900-01-01' ), 'DD-MON-YYYY' ) as myDt
FROM your_table;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |