如何避免本地时间戳的毫秒部分?

时间:2012-02-22 11:06:23

标签: sql oracle

从dual选择localtimestamp;

上述查询显示此格式为22-FEB-12 04.27.02.225354000 PM。

如何编写查询以获得22-FEB-12 04.27.02 PM

3 个答案:

答案 0 :(得分:2)

或者:

select current_date from dual;

或者:

select to_char(localtimestamp,'dd-MON-yyyy hh.mi.ss AM') from dual;  

虽然两者都没有返回timestamp格式。

答案 1 :(得分:0)

试试这个:

SELECT TO_CHAR(dateColumn, 'YYYY-MM-DD HH12.MI.SS PM')

查看文档以获取有关TO_CHAR功能的更多信息,以及支持的格式:

http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions180.htm#i1009324

http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm

答案 2 :(得分:0)

如果结果必须是TIMESTAMP,则有几个选项。尝试运行以下内容:

SELECT LOCALTIMESTAMP,
       CAST(LOCALTIMESTAMP AS TIMESTAMP(0)) AS CAST_TIMESTAMP0,
       CURRENT_DATE,
       CAST(CURRENT_DATE AS TIMESTAMP) AS DATE_CAST_TO_TIMESTAMP,
       TO_TIMESTAMP(TO_CHAR(LOCALTIMESTAMP, 'DD-MON-YYYY HH24:MI:SS'), 'DD-MON-YYYY HH24:MI:SS') AS CHAR_TIMESTAMP,
       CAST(TO_TIMESTAMP(TO_CHAR(LOCALTIMESTAMP, 'DD-MON-YYYY HH24:MI:SS'), 'DD-MON-YYYY HH24:MI:SS') AS TIMESTAMP(0)) AS TRUCATED_TIMESTAMP
  FROM DUAL

请注意,CAST_TIMESTAMP0,CURRENT_DATE和DATE_CAST_TO_TIMESTAMP值将四舍五入到最接近的秒而不是截断 - 重新运行查询,直到LOCALTIMESTAMP的小数部分介于0.5和1.0之间才能看到这一点。如果您可以接受四舍五入的值,那么您就可以去了。如果不是,您可能需要使用最后两个版本将时间戳转换为字符串然后再返回。

另请注意,上面的CHAR_TIMESTAMP值仍然具有默认的小数位数,但都为零。如果你不想要这个,你需要使用TRUNCATED_TIMESTAMP值。

分享并享受。