为什么Date列上的RPAD()只返回日期组件?

时间:2011-02-21 10:51:04

标签: sql oracle10g

我在表格中有一列数据类型为DATE。当我通过查询获取列时(我使用SYSDATE作为示例,但行为是相同的),我得到日期/时间 - 我理解。

SELECT SYSDATE
FROM DUAL

SYSDATE
--------------------
21-Feb-11 12:24:39 PM

现在,使用rpad()仅返回日期部分

SELECT SYSDATE, RPAD(SYSDATE, '9') 
FROM DUAL

        SYSDATE        | RPAD(SYSDATE, '9') 
 ----------------------|-------------------
 21-Feb-11 12:27:14 PM | 21-FEB-11       

Oracle documentation州:

  

RPAD返回expr1,右边填充到长度为n个字符的expr2,根据需要复制多次。如果expr1长于n,则此函数返回expr1中适合n的部分。

现在sysdate会返回字符> 9,为什么不这样说,rpad(16)回复日期和时间?

SELECT SYSDATE, RPAD(SYSDATE, '16') 
FROM DUAL

        SYSDATE        | RPAD(SYSDATE, '16') 
 ----------------------|-------------------
 21-Feb-11 12:27:14 PM | 21-FEB-11     

1 个答案:

答案 0 :(得分:2)

RPAD是一个字符串函数,因此当您将其应用于DATE值时,Oracle首先必须隐式地将日期转换为字符串,它使用会话的默认格式掩码,通常不包括时间组件。试试这个:

SELECT SYSDATE, RPAD (TO_CHAR(SYSDATE,'DD-Mon-YY HH:MI:SS'), 16)
FROM DUAL;

话虽如此,当您选择SYSDATE时, 会得到时间。如果我试图复制你的案子,我会看到:

SQL> alter session set nls_date_format = 'DD-MON-RR HH24:MI:SS';
SQL> select sysdate, rpad(sysdate,16) from dual;

SYSDATE            RPAD(SYSDATE,16)
------------------ ----------------
21-FEB-11 11:20:20 21-FEB-11 11:20:

即。几乎是你希望看到的。这让我想知道:如何设置格式以便SELECT SYSDATE FROM DUAL显示时间?