【问题标题】:ORACLE convert datetime without millisecondsORACLE 无毫秒转换日期时间
【发布时间】:2021-08-18 22:57:39
【问题描述】:

您好,我有这个专栏:DATETIME_UTC as timestamp(9):

2/3/2019 1:27:00.000000 AM

如何在 select 语句中将此列转换为:

2/3/2019 1:27:00 AM

只需要删除毫秒。只需要转换并保持为日期

问候

【问题讨论】:

  • cast(..... as date)

标签: sql oracle datetime


【解决方案1】:

我的完整测试脚本:

set linesize 32000
set pagesize 1000
set head on
set echo on
set termout on
set trimspool on

spool test2.log

-- https://stackoverflow.com/questions/68840203/oracle-convert-datetime-without-milliseconds

-- desired format 2/3/2019 1:27:00 AM

alter session set nls_date_format='MM/DD/YYYY HH12:MI:SS AM';

drop table test;

create table test (datetime_utc timestamp(9));

insert into test values (to_timestamp('02/03/2019 01:27:00.000000 AM','MM/DD/YYYY HH:MI:SS.FF6 AM'));
commit;

select datetime_utc from test;

-- general approach to change dates and times
-- convert to string and back

select to_date(to_char(datetime_utc,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') from test;

-- suggested in comments - simpler way to just truncate milliseconds

select cast(datetime_utc as date) from test;

spool off

输出的最后一部分:

SQL> select datetime_utc from test;

DATETIME_UTC
---------------------------------------------------------------------------
03-FEB-19 01.27.00.000000000 AM

SQL> 
SQL> -- general approach to change dates and times
SQL> -- convert to string and back
SQL> 
SQL> select to_date(to_char(datetime_utc,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') from test;

TO_DATE(TO_CHAR(DATETI
----------------------
02/03/2019 01:27:00 AM

SQL> 
SQL> -- suggested in comments - simpler way to just truncate milliseconds
SQL> 
SQL> select cast(datetime_utc as date) from test;

CAST(DATETIME_UTCASDAT
----------------------
02/03/2019 01:27:00 AM

对于这个问题,强制转换是更有效的解决方案,但转换为字符串并返回日期可以解决许多日期和时间问题,因此它是一种更通用的解决方案。

鲍比

【讨论】:

  • 或者干脆cast(datetime as date)
【解决方案2】:

您在同一时间显示两次。 2/3/2019 1:27:00.000000 AM 与 2/3/2019 1:27:00 AM 的时间戳完全相同。这只是显示它的另一种方式。 February 3, 2019 01:27 是另一个,还有很多其他的显示方式。

因此,您似乎不想在此处删除任何内容,而只是以不同的方式显示时间戳。这通常在您的应用程序或网站中完成,因此时间戳会根据用户的操作系统设置显示。 (例如,我认为这可能是 03.02.2019 01:27,因为我的 Windows 有德语设置)。

但您也可以要求 Oracle 将时间戳转换为所需格式的字符串。这是通过TO_CHAR 完成的。例如

select to_char(ts, 'mm/dd/yyyy hh:mi:ss am') from mytable;

这可以用于例如当您想要将结果写入文件并且您需要一个固定的时间戳格式时。

如果这是关于您的 SQL 工具(例如 SQL Developer 或 Toad),您可能可以在那里设置默认值,如何显示日期和时间戳。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多