Oracle - как создать дату из уже существующей даты? - PullRequest
0 голосов
/ 08 мая 2009

Скажите, что я выпускаю:

select date_field from table1;

date_field похоже на «25.11.2009» Я постараюсь изменить положение полей даты с месяцем и наоборот. (конечно за сутки> 12 некоторые манипуляции)

 TO_DATE( MOD(SUBSTR(TO_CHAR(a.A_DATE, 'DD.MM.YYYY'), 4, 2), 12) || '.' ||
              SUBSTR(TO_CHAR(a.A_DATE, 'DD.MM.YYYY'), 1, 2) || 
              SUBSTR(TO_CHAR(a.A_DATE, 'DD.MM.YYYY'), 6, 4),
          'DD.MM.YYYY') 

Дело в том, что значение, возвращаемое из MOD () - это число, т. Е. На 01.07.2009 -> я получаю 1 для даты, а не «01», как ожидалось. Позже я не могу получить дату. Есть ли быстрое решение моей проблемы?

Ответы [ 5 ]

4 голосов
/ 08 мая 2009

Я подозреваю, что вам нужно серьезно пересмотреть то, что вы пытаетесь сделать.

Я думаю, что вы начали с того, что хотите просто изменить форматирование даты, например, измените «25.11.2009» на «11.25.2009».

Если поле date_field на самом деле является типом DATE, в поле не сохраняется внутреннее форматирование. Это числовое значение, представляющее конкретную дату и время. Он форматируется в текст, когда вы выбираете его в SQLPlus или другом инструменте, но это форматирование не сохраняется в таблице.

Если вы хотите просмотреть дату в определенном формате, вы используете функцию TO_CHAR для ее принудительного применения. Вы также можете установить модель формата по умолчанию для одного сеанса, одного клиента или всей базы данных, используя NLS_DATE_FORMAT.

1 голос
/ 08 мая 2009

Я использовал: CASE MOD (SUBSTR (TO_CHAR (день рождения, «ДД.ММ.ГГГГ»), 1, 2), 12) КОГДА 1 ТО «01» КОГДА 2 ТОГДА '02' КОГДА 3 ТО "03" КОГДА 4 ТО «04» КОГДА 5 ТО «05» КОГДА 6 ТО «06» КОГДА 7 ТО «07» КОГДА 8 ТО «08» КОГДА 9 ТО «09» КОГДА 10, ТО «10» КОГДА 11, ТО «11» КОГДА 12 ТО «12» КОНЕЦ не очень элегантно, но работает:)

0 голосов
/ 25 мая 2009

yli> «Я каким-то образом анонимизирую дату, фактически найма сотрудников, для использования в тестовой среде».

Итак, вот ваше действительное требование. Если вы хотите изменить некоторые даты, вам вообще не нужно использовать функции преобразования даты / строки (TO_CHAR/TO_DATE). Oracle напрямую поддерживает арифметические операции со значениями даты.

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

select date_field + dbms_random.value * 100 from table1;
0 голосов
/ 08 мая 2009

Вы пробовали TO_CHAR(<date>, '<format>')?

0 голосов
/ 08 мая 2009

Это работает?

TO_DATE(TO_CHAR(a.A_DATE, 'DD/MM/YYYY'), 'MM/DD/YYYY')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...