我有一个日期栏。
select RETAIL_ACQUISITION_DTTM from XXXXX.TABLE_2348
13/07/2018
我要选择返回的值,如下所示,
2018-07-13T00:00:00
因此必须将日期显示为YYYY-MM-DD,然后输入T,然后显示HH24:MI:SS
答案 0 :(得分:4)
您需要使用与实际字符串值匹配的格式模型将字符串(为什么以字符串形式存储?)转换为日期:
to_date(RETAIL_ACQUISITION_DTTM, 'DD/MM/YYYY')
该格式模型有误,这就是为什么您的结果获得0013年的原因。
然后,您可以使用to_char()
将日期转换回字符串,并可以使用T
这样的格式模型将固定的'YYYY-MM-DD"T"HH24:MI:SS'
嵌入为带双引号的字符文字:
with TABLE_2348 (RETAIL_ACQUISITION_DTTM) as (
select '13/07/2018' from dual
)
select to_char(to_date(RETAIL_ACQUISITION_DTTM, 'DD/MM/YYYY'),
'YYYY-MM-DD"T"HH24:MI:SS') as RETAIL_ACQUISITION_DTTM
from XXXXX.TABLE_2348;
RETAIL_ACQUISITION_
-------------------
2018-07-13T00:00:00
您还可以忽略它是一个日期,并使用字符串操作:
with TABLE_2348 (RETAIL_ACQUISITION_DTTM) as (
select '13/07/2018' from dual
)
select substr(RETAIL_ACQUISITION_DTTM, 7, 4)
|| '-' || substr(RETAIL_ACQUISITION_DTTM, 4, 2)
|| '-' ||substr(RETAIL_ACQUISITION_DTTM, 1, 2)
|| 'T00:00:00' as RETAIL_ACQUISITION_DTTM
from XXXXX.TABLE_2348;
RETAIL_ACQUISITION_
-------------------
2018-07-13T00:00:00
如果该列实际上是日期而不是字符串,那么您正在执行不必要的转换,包括依赖于NLS设置的隐式转换,并且如果该时间不是午夜,那么您将失去该值的原始时间:>
alter session set nls_date_format = 'DD-MON-RR';
with TABLE_2348 (RETAIL_ACQUISITION_DTTM) as (
select to_date('2018-07-13 12:34:56', 'YYYY-MM-DD HH24:MI:SS') from dual
)
select to_char(to_date(RETAIL_ACQUISITION_DTTM, 'YYYY-MM-DD-HH24:MI:SS'),
'YYYY-MM-DD HH24:MI:SS') as RETAIL_ACQUISITION_DTTM from XXXXX.TABLE_2348;
RETAIL_ACQUISITION_
-------------------
0013-07-20 18:00:00
这真的是在做
to_char(
to_date(
to_char(
RETAIL_ACQUISITION_DTTM,
'DD-MON-RR'), ---- from your session NLS_DATE_FORMAT setting
'YYYY-MM-DD-HH24:MI:SS'),
'YYYY-MM-DD HH24:MI:SS')
如果您跳到其他步骤,则可以直接设置日期格式:
with TABLE_2348 (RETAIL_ACQUISITION_DTTM) as (
select to_date('2018-07-13 12:34:56', 'YYYY-MM-DD HH24:MI:SS') from dual
)
select to_char(RETAIL_ACQUISITION_DTTM,
'YYYY-MM-DD"T"HH24:MI:SS') as RETAIL_ACQUISITION_DTTM
from XXXXX.TABLE_2348;
RETAIL_ACQUISITION_
-------------------
2018-07-13T12:34:56
它也不依赖于您的NLS设置,因此,如果它在具有不同设置的另一个会话中运行,也不会以有趣的方式中断。
答案 1 :(得分:0)
如果日期类型为sysdate,请用您的列名替换。
使用单个to_char:
select to_char(sysdate,'--YYYY-MM-DD"T"hh24:mi:ss') from dual;
使用两个to_char和串联进行简化。
select to_char(sysdate,'--'||'YYYY-MM-DD')||'T'||to_char(sysdate,'hh24:mi:ss') from dual; -- 13/07/2018
select '--'||to_char(sysdate,'YYYY-MM-DD')||'T'||to_char(sysdate,'hh24:mi:ss') from dual; -- 13/07/2018