我有两个表,即jobs
和company
,格式如下:
表1 jobs
company_name job_title category job_posted_date
============ ================= =========== ===============
ibm xamarin developer it jobs 26-09-2018
tech mahindra php developer it jobs 27-09-2018
milkyway java developer it jobs 15-08-2018
table2 company
company_name company_logo
============ ============
ibm logo_ibm.png
tech mahindra logo_tech.png
milkyway logo_milkyway.png
我的查询是:
SELECT company.company_logo, post_jobs.company_name, jobs.job_title, jobs.job_posted_date
FROM company
INNER JOIN jobs
on jobs.company_name = company.company_name
WHERE jobs.category = 'it Jobs' and (jobs.job_posted_date between '01-09-2018' and '01-10-2018')
ORDER BY jobs.job_posted_date desc
当我点击此查询并找到01-09-2018
到01-10-2018
之间的数据时,它对两个日期之间的数据均无显示。那我该如何解决这个问题呢?请帮助我。
谢谢
答案 0 :(得分:4)
我看到您的job_posted_date
列存在问题。也许您正在那里存储文本日期。假设不是,并且它是真实的日期列,则可以尝试以下查询:
SELECT
c.company_logo,
j.company_name,
j.job_title,
j.job_posted_date
FROM company c
INNER JOIN jobs j
ON j.company_name = c.company_name
WHERE
j.category = 'it Jobs' AND
j.job_posted_date BETWEEN '2018-09-01' AND '2018-10-01'
ORDER BY
j.job_posted_date DESC;
请注意,我将比较有效的MySQL日期文字,例如'2018-09-01
'。您使用的格式不起作用。
如果job_posted_date
列实际上以DD-MM-YYYY
格式讲述了 text 日期,那么您必须首先使用STR_TO_DATE
进行转换:
SELECT
c.company_logo,
j.company_name,
j.job_title,
j.job_posted_date
FROM company c
INNER JOIN jobs j
ON j.company_name = c.company_name
WHERE
j.category = 'it Jobs' AND
STR_TO_DATE(j.job_posted_date, '%d-%m-%Y') BETWEEN '2018-09-01' AND '2018-10-01'
ORDER BY
j.job_posted_date DESC;
这里的故事的寓意是在MySQL中存储日期信息时始终使用适当的日期列。并始终将有效的日期/时间文字与这些列进行比较。
答案 1 :(得分:0)
您输入的日期格式有误。您查询的日期格式必须与数据库中保存的日期格式相同,即(YYYY-MM-DD),因此根据以下新查询给出:
SELECT company.company_logo, jobs.company_name, jobs.job_title, jobs.job_posted_date
FROM company
INNER JOIN jobs
on jobs.company_name = company.company_name
WHERE jobs.category = 'it Jobs' and (jobs.job_posted_date between '2018-09-01' and '2018-10-01')
ORDER BY jobs.job_posted_date desc
查询的输出也位于随附的屏幕快照中。 https://i.stack.imgur.com/T2SWb.png