在Oracle中将字符串转换为时间戳时如何保持军事格式?

时间:2013-05-19 16:40:57

标签: plsql

这是我的代码:

 l_ts := to_timestamp((d || ' 13:00:00'), 'DD.MM.YYYY:HH24:MI:SS'); 
 u_ts := to_timestamp((d || ' 17:00:00'), 'DD.MM.YYYY:HH24:MI:SS');

我一直在:

26-MAY-13 01.00.00.000000 PM 26-MAY-13 05.00.00.000000 PM

我想:

26-MAY-13 13.00.00.000000 PM 26-MAY-13 17.00.00.000000 PM

即。 13 17 而不是 1 5

感谢hrlping

1 个答案:

答案 0 :(得分:1)

您正在将字符串转换为日期,然后直接显示日期。 当您这样做时,输出将在内部格式化为字符串,它取决于您的会话区域设置。

如果您想以您想要的格式获取日期,您应该使用TO_CHAR函数将您的日期格式化回字符串,当您需要将其显示给用户时。使用TO_CHAR您可以使用format models以您希望的任何格式获取日期(尝试在SQL服务器中执行...;)。

考虑这个脚本:

set serveroutput on;
DECLARE 
    l_ts TIMESTAMP;
BEGIN
    -- Here You get DATE from STRING
    l_ts := to_timestamp(('01.01.2013' || ' 13:00:00'), 'DD.MM.YYYY:HH24:MI:SS'); 
    -- Here You get STRING representation of Your DATE. 
    -- Representation depends on You session settings, 
    -- and should not be relayed upon.
    dbms_output.put_line(l_ts);
    -- Examples how You can display DATE as STRING in any way You need
    dbms_output.put_line(TO_CHAR(l_ts,'YYYY-MM-DD HH24:MI:SS'));
    dbms_output.put_line(TO_CHAR(l_ts,'YYYY-MM-DD HH12:MI:SS AM'));
END;

希望能够明确这个问题。 :)