#sql #string #oracle #datetime #case
#sql #строка #Oracle #datetime #регистр
Вопрос:
У меня есть таблица Oracle, имеющая col_date с разными датами в ней, я хочу обновить свою таблицу на основе приведенного ниже условия:
- Если столбец col_date содержит даты в формате ‘MM / dd / yy’, измените дату на формат даты oracle как ‘dd-MMM-yyyy’, иначе обновите значение null.
Попробовано ниже условия обращения:
select field1,
field2,
case
when Check_Date_Input like to_date(Check_Date_Input,'MM/dd/yy')
then date_format(to_date(Check_Date_Input, 'MM/dd/yy'), 'dd-MMM-yyyy')
else null
end as check_date
from Table
Этот запрос обновляет поле даты до null во всех регистрах. Пожалуйста, укажите правильное условие регистра.
Комментарии:
1. Тип данных Oracle DATE не имеет формата. Формат используется только при преобразовании ДАТЫ с помощью встроенных функций TO_CHAR или TO_DATE . Oracle — это не MySQL. Вы должны удалить тег «mysql» из своего вопроса. Обратите внимание, что тип данных Oracle DATE содержит как дату, так и время. Оператор LIKE предназначен для использования с типами данных CHAR или VARCHAR2, а не для типа данных ДАТЫ.
2. Это делает именно то, что вы написали. Ваше условие else указывает возвращать значение null в случае несоответствия формата. 2. Пожалуйста, отметьте только одну базу данных, которую вы используете, и в настоящее время она, похоже, перепутана.
3. удален тег, но мой sql не работает ни для одного формата, который он обновляет только до нулевого значения. Можете ли вы помочь мне исправить запрос
4. Неплохо.. можно ли предоставить некоторые образцы данных из таблицы в смешанном формате и как вы видите ожидаемый результат.
5. Что такое тип
check_date_input
данных ? Если это varchar2 и у вас есть сочетаниеmm/dd/yy
, иdd/mm/yy
тогда у вас действительно проблемы, потому что нет способа определить, какой из нихdd
меньше 13.
Ответ №1:
Дата Oracle не имеет определенного формата. Он хранится в некотором внутреннем формате, о котором вам действительно не нужно беспокоиться. С другой стороны, при отображении даты Oracle создает строковое представление даты, которое вы видите в своих выходных данных.
По умолчанию формат определяется параметром nls nls_date_format
. Вы можете изменить его на любой, который вам нравится, изменив настройки базы данных в сеансе или явно используя to_char()
в своем запросе.
Допустим, вам нужен формат dd-mmm-yyyy
, тогда вы можете либо сделать:
alter session set nls_date_format = 'dd-mm-yyyy';
А затем запустите ваш запрос как:
select field1, field2, check_date_input from mytable
Настройка nls остается активной в течение всего срока действия вашего сеанса, поэтому каждый date
столбец будет отображаться в этом формате в ваших наборах результатов.
Или вы можете использовать to_char()
в запросе:
select field1, field2, to_char(check_date_input, 'dd-mm-yyyy') as check_date_input from mytable