Почему RPAD () в столбце Date возвращает только компонент даты? - PullRequest
2 голосов
/ 21 февраля 2011

У меня есть столбец в таблице с типом данных 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 состояния:

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 Ответ

2 голосов
/ 21 февраля 2011

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 FRU DUAL показывал время?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...