Между датой функция ММ / ДД / ГГГГ 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
Другие вопросы по тегам