简体   繁体   English

SQL查询存储为键值对的日期

[英]SQL query for date stored as key-value pair

I have table with following structure 我有以下结构的表

  **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

If I want to retrieve records between two dates between 2000-06-01T:00:00, 2010-06-11T15:00:00, written the query as below. 如果要检索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')

But I am getting 0 records , please someone let me know where I am missing. 但是我得到0条记录,请有人让我知道我在哪里。

Note: database is ORACLE 注意:数据库是ORACLE

Thanks. 谢谢。

Of course it's not going to work, because you're asking for a value to be both Job_Start and Job_End at the same time. 当然,这是行不通的,因为您要同时Job_StartJob_End的值。 If you really want to return all records between 2000-06-01T:00:00 and 2010-06-11T15:00:00 , then this should be correct: 如果您确实要返回2000-06-01T:00:002010-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'

Your query is incorrect. 您的查询不正确。

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')

You should change it to 您应该将其更改为

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'))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM