Преобразование даты в Oracle (формат ГГГГММДД обратно в ГГГГММДД) - PullRequest
0 голосов
/ 17 мая 2018

Привет, я довольно новичок в Oracle, и мне нужна идея, как это сделать.

Считайте, что у меня есть текстовый файл, и значение в файле

'20180924' '20180923'

Я читаю это значение из Pro * c, а затем добавляю к нему 29 дней, поэтому значение теперь меняется с 20180924 на 20180953. Я не хочу, чтобы это произошло, я хочу, чтобы значение было добавлено как

 TO_DATE('20180924','yyyymmdd')+29 which returns the value as "23-OCT-18" 

Ответ правильный, но я хочу, чтобы результат также был в том же формате ГГГГММДД , например 20181023.

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Даты не имеют формата - они представлены внутри 7 или 8 байтами .

Если вы хотите, чтобы дата имела формат, вам необходимо преобразовать ее в тип данных, который можно отформатировать - то есть строку:

TO_CHAR( TO_DATE( '20180924', 'yyyymmdd' ) + 29, 'YYYYMMDD' )

Когда SQL / Plus (или SQL Developer) отображает типы данных даты, они неявно преобразуют их в строки (поскольку это более важно для вас, пользователя, чем отображение необработанных байтов) и используют параметр сеанса NLS_DATE_FORMAT в качестве Модель формата в этом неявном преобразовании. Если вы хотите изменить это, вы можете использовать:

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYYMMDD';

, а затем ваш запрос:

TO_DATE( '20180924', 'yyyymmdd' ) + 29

должен (при условии, что ваш клиент SQL использует этот параметр и не имеет своих собственных настроек внутреннего формата) давать ожидаемый результат. (Примечание: это изменит формат по умолчанию для клиента, чтобы отображать все даты в этом сеансе, а не только этот один оператор.)

0 голосов
/ 17 мая 2018

Просто отформатируйте его обратно.

to_char(TO_DATE('20180924','yyyymmdd')+29, 'yyyymmdd')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...