尝试使用 Oracle SQL 从日期时间字段中删除毫秒和下午/上午。
我的查询是:
select created_dt from mydatabase
输出是:
09-NOV-21 12.18.40.490000000 PM
我尝试使用to_char(created_dt, 'dd-mm-yy hh24:mi:ss')然后使用to_timestamp转换回日期时间类型,但毫秒再次显示。
尝试使用 Oracle SQL 从日期时间字段中删除毫秒和下午/上午。
我的查询是:
select created_dt from mydatabase
输出是:
09-NOV-21 12.18.40.490000000 PM
我尝试使用to_char(created_dt, 'dd-mm-yy hh24:mi:ss')然后使用to_timestamp转换回日期时间类型,但毫秒再次显示。
数据类型以二进制数据类型的TIMESTAMP形式存储在表中,世纪、世纪、月、日、小时、分钟和秒各有 1 个字节,小数秒最多有 6 个字节。它永远不会以任何特定格式存储。
如果要更改时间戳中的小数位数,则需要使用CAST:
SELECT CAST(created_dt AS TIMESTAMP(0))
FROM mydatabase
但是,您可以将其转换为 a DATE(它也有按年计算的组件,但没有小数秒):
SELECT CAST(created_dt AS DATE)
FROM mydatabase
完成此操作后,您使用的任何客户端应用程序(SQL/Plus、SQL Developer、Java、C#、PHP 等)仍将使用其默认规则来显示TIMESTAMP(或DATE),并且这些规则可能会显示一定数量的小数秒。
如果您使用的是 SQL/Plus 或 SQL Developer(但如果您使用的是 Java、C#、PHP 等),则默认格式由NLS_TIMESTAMP_FORMATsession 参数控制。
您可以使用以下方法更改它:
-- Display with precision of the data type
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF';
-- Display with 6-digits precision
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF6';
-- Display with no fractional seconds.
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
但是,如果您想要一种一致的格式化 a 的方法,请TIMESTAMP使用TO_CHAR.
无法更改 DATE 或 TIMESTAMP 数据类型的存储方式。
但是您可以更改查询默认为会话输出 TIMESTAMP 的方式。
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS'
例子:
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MON-DD HH24:MI:SS'; ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
select ts , CAST(ts AS DATE) dt , CAST(ts AS TIMESTAMP WITH TIME ZONE) AS tstz from ( select to_timestamp('2021-11-30 23:30:45.123456789', 'YYYY-MM-DD HH24:MI:SS.FF') AS ts from dual ) qTS | DT | 三峡工程 :----------------- | :-------------------- | :-------------------------------- 2021-11-30 23:30:45 | 2021-11-30 23:30:45 | 21 年 11 月 30 日 23.30.45.123457 +00:00
db<>在这里摆弄