簡體   English   中英

Oracle TO_CHAR輸出包括BC

[英]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

請注意, dt2dt3列出現兩對正面和負面的價值觀是相同的,即使實際日期是不同的。

您的日期值沒有改變,顯示方式卻有所變化。 它們不會“變成負數”-無論出於何種原因,它們都是負數,有時您將其轉換為字符串以表明這一點。 如果將NLS_DATE_FORMAT更改為'SYYYY-MM-DD'select *還將通過使用該NLS參數的隱式轉換將它們顯示為負數。

如果僅在數據中期望AD值,則需要調查如何以及為何插入BC(負)值。 與您如何查看它們的顯示方式完全不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM