Обновление дат с 19XX до 20XX в Oracle - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть таблица, в которой даты были неправильно введены как 19XX, а не 20XX.

Возможно ли иметь запрос на обновление, который изменит любое значение в определенном поле с 19XX до 20XX (формат даты в Великобритании) где исходная дата меньше 01.01.2000?

Например,

ID    FieldA
123   23/11/1917

станет

ID    FieldA
123   23/11/2017

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

Вы можете воспользоваться сокращенным YY форматом даты. Цитировать документы:

Если вы используете функцию TO_DATE с элементом формата даты и времени YY, затем возвращаемый год всегда имеет те же первые 2 цифры, что и текущий год.

Следовательно, to_date(to_char(fieldA, 'ddmmyy'), 'ddmmyy') должен делать то, что вам нужно. Будьте осторожны, если есть даты с годами меньше 1900 или старше 2100, они также будут преобразованы.

0 голосов
/ 13 сентября 2018

Предполагая, что у вас может быть правильная дата во второй половине 20-го века, и вам нужно обновить только более раннюю половину века (пожалуйста, подтвердите это):

UPDATE table_name
SET    date_column = ADD_MONTHS( date_column, 12 * 100 )
WHERE  date_column >= DATE '1900-01-01'
AND    date_column <  DATE '1950-01-01';

Если выесли вы хотите изменить даты для всех лет в 20-м веке, то:

UPDATE table_name
SET    date_column = ADD_MONTHS( date_column, 12 * 100 )
WHERE  date_column >= DATE '1900-01-01'
AND    date_column < DATE '2000-01-01';

Примечание: вам нужно использовать функцию ADD_MONTHS вместо добавления INTERVAL '100' YEAR(3), так как в 20-м веке есть даты, которыене в 21 веке (то есть 1900-02-29).

0 голосов
/ 13 сентября 2018

Если FieldA является date, то вы можете сделать:

select (case when fieldA < date '2000-01-01'
             then fieldA + interval '100' year(3)
             else fieldA
        end)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...