【发布时间】:2014-12-26 15:43:04
【问题描述】:
我在 Oracle 中有一个 TIMESTAMP(6) 字段,我需要从时间中删除毫秒部分。
例如我有
10/20/2014 10:34:06.356000 AM
我想删除毫秒以便我有
10/20/2014 10:34:06 AM
你知道最好的方法吗?
谢谢!
【问题讨论】:
我在 Oracle 中有一个 TIMESTAMP(6) 字段,我需要从时间中删除毫秒部分。
例如我有
10/20/2014 10:34:06.356000 AM
我想删除毫秒以便我有
10/20/2014 10:34:06 AM
你知道最好的方法吗?
谢谢!
【问题讨论】:
这个怎么样?
select cast(col as timestamp(0))
编辑:
避免四舍五入的最简单方法是使用trunc() 或减去半秒:
select cast(col - 0.5/(24*60*60) as timestamp(0))
【讨论】:
试试这个
SELECT TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "NOW"
FROM DUAL;
如果您需要 12 小时日期格式
SELECT TO_CHAR(SYSDATE, 'MM-DD-YYYY HH:MI:SS AM') "NOW"
FROM DUAL;
【讨论】:
您可以将其转换为不带小数秒的时间戳(这将四舍五入到最接近的秒数):
CAST( your_timestamp AS TIMESTAMP(0) )
或DATE 数据类型(这将截断到最接近的秒数):
CAST( your_timestamp AS DATE )
如果您希望它为 TIMESTAMP(0) 数据类型,则将其转换回:
CAST( CAST( your_timestamp AS DATE ) AS TIMESTAMP(0) )
或者您可以将其转换为格式化字符串并指定您要使用的格式模型(这将截断到最接近的秒数):
TO_CHAR( your_timestamp, 'YYYY-MM-DD HH24:MI:SS' )
像这样:
Oracle 11g R2 架构设置:
CREATE TABLE your_table ( your_timestamp ) AS
SELECT TIMESTAMP '2017-10-25 12:53:12.10076' FROM DUAL;
查询 1:
SELECT CAST( your_timestamp AS TIMESTAMP(0) ) AS "Timestamp",
CAST( your_timestamp AS DATE ) AS "Date",
TO_CHAR( your_timestamp, 'DD-MM-YYYY HH24:MI:SS' ) AS "String"
FROM your_table
| Timestamp | Date | String |
|-----------------------|----------------------|---------------------|
| 2017-10-25 12:53:12.0 | 2017-10-25T12:53:12Z | 25-10-2017 12:53:12 |
注意:TIMESTAMP 和 DATE 在输出中的格式取决于您的 NLS_TIMESTAMP_FORMAT 和 NLS_DATE_FORMAT 会话参数,但您可以在指定格式模型时直接控制 TO_CHAR 的格式。
【讨论】:
这可能会有所帮助!
select substr(to_char('10/20/2014 10:34:06.356000 AM'),1,instr(to_char('10/20/2014 10:34:06.356000 AM'),'.')-1)||' '||
substr(to_char('10/20/2014 10:34:06.356000 AM'),-2,instr(to_char('10/20/2014 10:34:06.356000 AM'),'.')-1) "Date"
from dual;
【讨论】: