Как получить данные из базы данных между двумя датами, используя внутреннее соединение? - PullRequest
0 голосов
/ 01 октября 2018

У меня есть две таблицы, т.е. jobs и company, а формат указан ниже:

table1 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, мне ничего не видно, где данные находятся между двумя датами.Итак, как я могу решить эту проблему?Пожалуйста, помогите мне.

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Вы делали ошибку в формате даты. В вашем запросе формат даты должен быть таким же, как и в базе данных, т.е. (ГГГГ-ММ-ДД), поэтому в соответствии с этим новым запросом приведено ниже:

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

0 голосов
/ 01 октября 2018

Я вижу проблему с вашим столбцом 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, то вам придется использовать 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.И всегда сравнивайте действительные литералы даты / времени с этими столбцами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...