Между датой функция ММ / ДД / ГГГГ Mysql
Я пытаюсь получить все записи между двумя датами. Тем не менее, я получаю только запись только с 1 датой. Моя структура дат - Varchar(20).
Вот мой запрос:
ты можешь помочь мне с этим?:(
SELECT a.DOB as `DATE`,
(CASE when f.INHOUR > 12 or f.INHour = 12 Then 'PM'
else 'AM' END) as Shift,
concat(b.FIRSTNAME, ' ', b.LASTNAME) Fullname,
a.Amount as DECLARED,
SUM(c.Amount) as CALCULATED,
a.AMOUNT as `NET OF SPECIAL SALES`,
d.Amount as `CASH OVER SHORT`,
a.AMOUNT as `CASH DEPOSIT`
FROM gndsale a
INNER JOIN emp b
ON a.ID= b.ID
INNER JOIN gndsale c
ON b.ID= c.ID
INNER JOIN gndsale d
on b.ID = d.ID
INNER JOIN adjtime f
on a.ID= f.ID
WHERE a.type = "22"
AND c.type = "4"
AND d.type = "42"
and (a.DOB BETWEEN '5/1/2017' AND '5/19/2017')
GROUP BY b.ID
3 ответа
Если твой DOB
столбец действительно будет текстовым, тогда вам следует серьезно подумать о переключении этого столбца на тип даты. При этом, если вы должны действовать как есть, вы можете использовать функцию MySQL STR_TO_DATE(), которая может преобразовывать ваши текстовые даты в фактические типы дат. Затем используйте тот же BETWEEN
сравнение. Обратите внимание, что я заменил ваш неверный mm/DD/YYYY
литералы даты с литералами, соответствующими ANSI, формы YYYY/mm/DD
,
WHERE
STR_TO_DATE(a.DOB, '%m/%d/%Y') BETWEEN '2017-05-01' AND '2017-05-19'
ПОЖАЛУЙСТА, ПОПРОБУЙ:::
SELECT a.DOB as `DATE`,
(CASE when f.INHOUR > 12 or f.INHour = 12 Then 'PM'
else 'AM' END) as Shift,
concat(b.FIRSTNAME, ' ', b.LASTNAME) Fullname,
a.Amount as DECLARED,
SUM(c.Amount) as CALCULATED,
a.AMOUNT as `NET OF SPECIAL SALES`,
d.Amount as `CASH OVER SHORT`,
a.AMOUNT as `CASH DEPOSIT`
FROM gndsale a
INNER JOIN emp b
ON a.ID= b.ID
INNER JOIN gndsale c
ON b.ID= c.ID
INNER JOIN gndsale d
on b.ID = d.ID
INNER JOIN adjtime f
on a.ID= f.ID
WHERE a.type = "22"
AND c.type = "4"
AND d.type = "42"
AND (a.DOB BETWEEN CAST('5/1/2017') as date) AND CAST('5/19/2017' as date) )
GROUP BY b.ID
МЕЖДУ ДЕЙСТВИЕМ НЕ МОЖЕТ ИСПОЛЬЗОВАТЬСЯ С ДАТАМИ В ФОРМЕ СТРОКИ ХАРАКТЕРА. (ЭТО МОЖЕТ БЫТЬ, НО ЭТО НЕ БЫЛО ЛОГИЧЕСКИМ)
CHEERS
SELECT a.DOB as `DATE`, (CASE when f.INHOUR > 12 or f.INHour = 12 Then 'PM'
else 'AM' END) as Shift, concat(b.FIRSTNAME, ' ', b.LASTNAME) Fullname,
a.Amount as DECLARED, SUM(c.Amount) as CALCULATED, a.AMOUNT as `NET OF
SPECIAL SALES`, d.Amount as `CASH OVER SHORT`, a.AMOUNT as `CASH DEPOSIT`
FROM gndsale a INNER JOIN emp b ON a.ID= b.ID INNER JOIN gndsale c ON
b.ID= c.ID INNER JOIN gndsale d on b.ID = d.ID INNER JOIN
adjtime f on a.ID= f.ID WHERE a.type = "22" AND c.type = "4"
AND d.type = "42" and (STR_TO_DATE(a.DOB BETWEEN,'%m-%d-%Y') STR_TO_DATE('5/1/2017','%m-%d-%Y') AND '5/19/2017','%m-%d-%Y')) GROUP BY
b.ID