2016-08-17 2 views
0

У меня есть таблица со следующей структуройSQL-запрос для даты хранятся в виде пары ключ-значение

**JobData** - Table 
--------------------------- 
    id - Number  
    key - Varchar 
    value - Varchar 



     Data: 
    ----------------- 
    ID   value    key 
----------------------------------------------- 
    21212 2010-06-11T15:00:00  Job_End 
    21213 2008-12-01T23:59:00  Job_Start 
    21214 2008-12-01T23:59:00  Job_Start 
    21215 2018-06-11T15:00:00  Job_End 
    21216 2015-06-11T15:00:00  Job_End 

Если я хочу, чтобы получить записи между двумя датами между 2000-06-01T: 00: 00, 2010-06- 11T15: 00: 00, написал запрос, как показано ниже.

SELECT * FROM JobData jd 
WHERE 
jd.key IN ('Job_Start', 'Job_End') 
AND (jd.key = 'Job_Start' and jd.value BETWEEN '2000-06-01T:00:00' AND '2010-06-11T15:00:00') 
AND (jd.key = 'Job_End' and jd.value BETWEEN '2000-06-01T:00:00' AND '2010-06-11T15:00:00') 

Но я получаю 0 записей, пожалуйста, сообщите мне, где я пропал без вести.

Примечание: база данных ORACLE

Спасибо.

+0

Ваши теги были правы в первый раз. Ваш вопрос не о «реляционной базе данных» или о «администрировании базы данных». – mathguy

+0

Спасибо за обновление соответственно :) – Raju

+0

Я бы предположил, что хранилище значений ключей является неправильной структурой для этого типа данных. Рефакторинг базы данных сэкономит вам время и производительность. и почти наверняка будет стоить того. – HLGEM

ответ

-1

Ваш запрос неверен.

SELECT * FROM JobData jd 
WHERE 
jd.key IN ('Job_Start', 'Job_End') 
AND (jd.key = 'Job_Start' and jd.value BETWEEN '2000-06-01T:00:00' AND '2010-06-11T15:00:00') 
AND (jd.key = 'Job_End' and jd.value BETWEEN '2000-06-01T:00:00' AND '2010-06-11T15:00:00') 

Вы должны изменить его

SELECT * FROM JobData jd 
WHERE 
jd.key IN ('Job_Start', 'Job_End') 
AND (TO_DATE(jd.value,'YYYY-MM-DDTHH24:MI:SS') BETWEEN TO_DATE('2000-06-01T00:00:00', 'YYYY-MM-DDTHH24:MI:SS') AND TO_DATE('2010-06-11T15:00:00', 'YYYY-MM-DDTHH24:MI:SS')) 
+0

Тестирование для 'jd.value' должно быть одновременно' 'Job_Start'' и' 'Job_End''? Определенное понижение. – mathguy

+0

все еще запрос не дает никакого результата, я правильно поменял имена столбцов, извините, была опечатка. – Raju

+0

@mathguy, вы видите предложение 'IN'? Это не означает одновременное «Job_start» и «Job_End». Проверьте свое понимание предложения «IN». – randominstanceOfLivingThing

0

Конечно, это не будет работать, потому что вы просите значение, чтобы быть как Job_Start и Job_End одновременно. Если вы действительно хотите, чтобы вернуть все записи между 2000-06-01T:00:00 и 2010-06-11T15:00:00, то это должно быть правильным:

SELECT * 
FROM JobData jd 
WHERE jd.key IN ('Job_Start', 'Job_End') 
    AND jd.value BETWEEN '2000-06-01T00:00:00' AND '2010-06-11T15:00:00' 
+0

И не забудьте ошибку в строке даты: первая имеет 'T: 00: 00', которая должна быть' T00: 00: 00'. – mathguy

+0

@math парень Хорошее место, спасибо! –

+0

Обратите внимание на наблюдение в S.Комментарий Бохара к его ответу тоже - у вас есть jd.value и jd.key перепутаны. – mathguy

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