2013-06-04 105 views
3

当我使用这个:SQL日期时间变量

VAR v_start_date VARCHAR2(30); 
    EXEC :v_start_date := to_date('03-06-2013 04:00:00 PM','DD-MM-RRRR HH:MI:SS AM'); 
    VAR v_end_date VARCHAR2(30); 
    EXEC :v_end_date := to_date('04-06-2013 04:00:00 PM','DD-MM-RRRR HH:MI:SS AM'); 

    print v_start_date 
    print v_end_date 

我的输出被缩短到这一点:

v_start_date     
    ------------------------------ 
    03-JUN-13      

    v_end_date      
    ------------------------------ 
    04-JUN-13      

我怎样才能让变量保持一天的时间?

+2

?甲骨文?它非常重要,特别是在日期和时间方面,每个系统与其他系统(至少部分)是不同的。 –

+0

DBMS是Oracle。 – jackchammons

回答

0

这应该工作:

VAR v_start_date VARCHAR2(30); 
EXEC :v_start_date := to_date('03-06-2013 04:00:00 PM','DD-MM-RRRR HH:MI:SS AM'); 
VAR v_end_date VARCHAR2(30); 
EXEC :v_end_date := to_date('04-06-2013 04:00:00 PM','DD-MM-RRRR HH:MI:SS AM'); 

print to_char(v_start_date,'DD-MM-RRRR HH:MI:SS AM'); 
print to_char(v_end_date,'DD-MM-RRRR HH:MI:SS AM'); 

编辑

更多信息有关TO_CHAR:

to_char

0

你是隐式转换分配时,它通过TO_DATE返回的日期时间值到一个varchar。您应该使用指定与适当的风格进行转换to_char,如:

EXEC :v_start_date := to_char(
    to_date('03-06-2013 04:00:00 PM','DD-MM-RRRR HH:MI:SS AM'), 
    'YYYY-MM-DD HH24:MI:SS'); 
0

无论是与TO_CHAR如已经指出格式化日期,或将所有日期的输出与世纪和时间,当前的SQLPlus会话,设置会话日期格式为:

ALTER SESSION SET NLS_DATE_FORMAT = 'MM/DD/YYYY HH:MI:SS AM'; 

在该点之后查询的任何日期将采用指定的格式。

要恢复到平时的Oracle默认:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-RR'; 

甲骨文DATETIME格式代码都记录here您使用哪种DBMS