当我跑步时
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
来自哪里?
有人知道我的日期有时会变得消极吗?
因为有时他们是正常的&#34;约会,有时他们有BC ...
答案 0 :(得分:1)
如果你的日期格式模型,无论是明确地还是通过你的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
列对于正值和负值对都显示相同。
您的日期值没有变化,您的显示方式如下。他们不会变得消极&#39; - 无论出于何种原因,他们 是否定的,有时你转换它们的字符串就显示出来了。如果您将NLS_DATE_FORMAT更改为'SYYYY-MM-DD'
,那么select *
也会通过使用该NLS参数的隐式转换将其显示为否定。
如果您只想要数据中的AD值,那么您需要调查插入BC(负)值的方式和原因。这与你看到它们的显示方式完全不同。