[英]Oracle TO_CHAR output includes BC
當我跑步
select *
我不知道約會的原因,因為他們很消極,我看到了:
Select to_char(start_date,'DD/MM/YYYY AD'),s.*
from LIST s
where start_date<to_date('00010101 00:00:00', 'yyyymmdd hh24:mi:ss')
order by s.start_date desc
但它們的寫法像是22/03/2016 BC
BC
從哪里來? 有人對我的約會有時變得消極有線索嗎? 因為有時他們是“正常”日期,有時他們得到了卑詩省...
如果您的日期格式模型(無論是顯式的還是通過NLS_DATE_FORMAT會話參數)不包括年份的符號或AD / BC指示符,則一旦它們是字符串,就無法區分,例如2016和-2016。
with t (dt) as (
select date '2016-03-22' from dual
union all select date '-2016-03-22' from dual
union all select date '0001-01-01' from dual
union all select date '-0001-01-01' from dual
)
select to_char(dt, 'SYYYY-MM-DD') as dt1,
to_char(dt, 'YYYY-MM-DD') as dt2,
to_char(dt, 'DD/MM/YYYY') as dt3,
to_char(dt, 'DD/MM/SYYYY') as dt4,
to_char(dt, 'DD/MM/YYYY AD') as dt5
from t;
DT1 DT2 DT3 DT4 DT5
----------- ---------- ---------- ----------- -------------
2016-03-22 2016-03-22 22/03/2016 22/03/ 2016 22/03/2016 AD
-2016-03-22 2016-03-22 22/03/2016 22/03/-2016 22/03/2016 BC
0001-01-01 0001-01-01 01/01/0001 01/01/ 0001 01/01/0001 AD
-0001-01-01 0001-01-01 01/01/0001 01/01/-0001 01/01/0001 BC
請注意, dt2
和dt3
列出現兩對正面和負面的價值觀是相同的,即使實際日期是不同的。
您的日期值沒有改變,顯示方式卻有所變化。 它們不會“變成負數”-無論出於何種原因,它們都是負數,有時您將其轉換為字符串以表明這一點。 如果將NLS_DATE_FORMAT更改為'SYYYY-MM-DD'
則select *
還將通過使用該NLS參數的隱式轉換將它們顯示為負數。
如果僅在數據中期望AD值,則需要調查如何以及為何插入BC(負)值。 與您如何查看它們的顯示方式完全不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.