我有一个表(作业),我试图在一个时间范围内查询特定的作业。我遇到的困难部分是作业流在日期更改(00:00)上运行。因此,当我输入日期时,我想查看作业流,并且我输入(例如)2014-02-11,逻辑搜索在输入的前一天开始的作业名称(因为作业流在日期更改时运行),然后获取在那里和最终作业之间运行的所有作业(在输入的实际日期)。我写了这个查询:
SELECT job_name, job_start_time, job_end_time
FROM job WHERE (job_start_time LIKE '2014-02-10%' AND job_name = 'start')
AND (job_end_time LIKE '2014-02-11%' AND job_name = 'end')
ORDER BY job_end_time ASC;
我可以在java中以编程方式执行此操作并解析额外的非作业流相关作业,但我宁愿点击数据库一次,只需要那里需要的数据。我考虑过尝试内部选择,但是从我读过的所有内容中,#1,它们可能代价高昂,#2通常比单个选择更昂贵。
上面的查询返回0结果,我不知道我做错了什么。
答案 0 :(得分:1)
除了字符串外,不要使用like
。所以,首先尝试这个版本:
SELECT job_name, job_start_time, job_end_time
FROM job
WHERE (date(job_start_time) = date('2014-02-10') AND job_name = 'start') or
(date(job_end_time) = date('2014-02-11') AND job_name = 'end')
ORDER BY job_end_time ASC;
我还将逻辑更改为or
,因为job_name
在同一记录中不能同时为start
和end
。
答案 1 :(得分:1)
明显的问题是你有job_name = 'start' AND job_name = 'end'
,只是用其他几个词来区分。 job_name
永远不会同时出现两件事,所以你总会得不到任何回报。