2012-04-24 2 views
0

Я работаю в Oracle 10g XE. У меня есть две базы данных внутри Oracle SQL Developer. Я выполняю этот запрос ..Настройка формата даты в базе данных

SELECT SCHEDULE_ID, START_DATE, END_DATE 
    FROM SCHEDULE 
WHERE C_ID IN (5781) 
    AND START_DATE >=TO_DATE ('1/29/2012','MM/DD/YYYY') 
    AND END_DATE <=TO_DATE ('4/14/2012','MM/DD/YYYY') 

В первой базе данных данные вернулись правильно. Я выполняю тот же запрос во второй базе данных, но он не возвращает никаких значений. Но данные доступны в таблице.

Я выполнил запрос

SELECT dump(START_DATE), dump(END_DATE) FROM SCHEDULE WHERE C_ID=5026 

Я получаю результат, как,

DUMP(START_DATE) -> Typ=12 Len=7: 100,112,2,7,1,1,1 
DUMP(END_DATE) -> Typ=12 Len=7: 100,112,2,13,1,1,1 

и важная вещь, я не должен модифицировать query..Because свою работу во всех другие базы данных ...

+4

Настройки даты не будут влиять на это. Вы уверены, что ваш _data_ одинаковый? – Ben

+0

yes.sure..i проверил. У меня есть данные в таблице. – RobinHood

+0

Я пробовал вот так ».... TO_DATE (START_DATE)> = TO_DATE ('1/29/2012', 'MM/DD/YYYY')« Его работа ... ..Но это не правильное решение .... – RobinHood

ответ

4

Ваше утверждение:

SELECT dump(START_DATE), dump(END_DATE) FROM SCHEDULE WHERE C_ID=5026 

Я получаю результат, как,

DUMP(START_DATE) -> Typ=12 Len=7: 100,112,2,7,1,1,1 and DUMP(END_DATE) -> Typ=12 Len=7: 100,112,2,13,1,1,1 

Мой комментарий:

100,112,2,7,1,1,1

100,112,2,13,1 1,1

Это приводит к YYYY-MM-DD

Startdate 0012-02-07 00:00:00 
Enddate  0012-02-13 00:00:00 

Значит, вам около 2000 лет.

Формат даты тип данных является

byte 1 - century (excess 100) 100 - 100 = 00 
byte 2 - year (excess 100) 112 - 100 = 12 
byte 3 - month = 2 
byte 4 - day = 7 
byte 5 - hour (excess 1) 1 - 1 = 0 
byte 6 - minute (excess 1) 1 - 1 = 0 
byte 7 - seconds (excess 1) 1 - 1 = 0 
+0

Привет, я не могу понять ваш ответ ..Пожалуйста, объясните мне, что мне делать ... – RobinHood

+0

Функция дампа показывает внутреннее представление даты в базе данных 100,112,2,7,1,1,1. Это соответствует 0012-02-07. В этот день Иисусу было около 12 лет. Сделайте выделение to_char (startdate, «YYYY-MM-DD») из расписания; и вы увидите. Поэтому, вероятно, ваши данные «неправильны», по крайней мере, не то, что вы ожидаете. –

+0

@RobinHood - Ваши даты в году 12, а не в 2012 году (2000 лет назад). Если вы хотите, чтобы оператор SQL работал, вам необходимо изменить данные, чтобы даты были правильными. Так, например, «установить расписание обновлений start_date = add_months (start_date, 12 * 2000), end_date = add_months (end_date, 12 * 2000), где c_id = 5026' будет обновлять эти две строки, чтобы годы были правильными. Возможно, у вас могут быть другие строки, в которых год неверен, поэтому вы можете сделать что-то вроде 'update schedule set start_date = add_months (start_date, 12 * 2000), где start_date

Смежные вопросы