2012-02-22 87 views
0

从dual中选择localtimestamp;如何避免localtimestamp的毫秒部分?

以上查询显示此格式的结果为22-FEB-12 04.27.02.225354000 PM。

如何编写查询来获取2月22日,12 02年4月27日下午

+0

这只是实际数据的字符串表示形式。无论何时将其展示给用户,您都可能会应用格式。那么为什么要在数据库级别上打扰呢? – Joey 2012-02-22 11:11:00

回答

2

或者:

select current_date from dual; 

或者:

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

虽然没有返回timestamp格式。

+0

谢谢...第二个工程.. – user1148952 2012-02-22 11:24:11

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值。

分享和享受。