MySQL Date Between - PullRequest
       2

MySQL Date Between

8 голосов
/ 19 сентября 2011

ИСПРАВЛЕНО - это то, что у меня сейчас - Написано в ASP

If Session("dateRange") = "Today" Then
        fromDate = Date()
        fromDate = Year(fromDate)&"-"&Month(fromDate)&"-"&Day(fromDate)
        whereClause = whereClause & "AND dateCreated = '"&fromDate&"' "
ElseIf Session("dateRange") = "Yesterday" Then
        fromDate = DateAdd("d",-1,Date())
        fromDate = Year(fromDate)&"-"&Month(fromDate)&"-"&Day(fromDate)
        whereClause = whereClause & "AND dateCreated = '"&fromDate&"' "
ElseIf Session("dateRange") = "1 Week" Then
        fromDate = DateAdd("d",-7,Date())
        fromDate = Year(fromDate)&"-"&Month(fromDate)&"-"&Day(fromDate)
        whereClause = whereClause & "AND dateCreated BETWEEN '"&fromDate&"' AND '"&toDate&"' "
ElseIf Session("dateRange") = "1 Month" Then
        fromDate = DateAdd("m",-1,Date())
        fromDate = Year(fromDate)&"-"&Month(fromDate)&"-"&Day(fromDate)
        whereClause = whereClause & "AND dateCreated BETWEEN '"&fromDate&"' AND '"&toDate&"' "
ElseIf Session("dateRange") = "3 Months" Then
        fromDate = DateAdd("m",-3,Date())
        fromDate = Year(fromDate)&"-"&Month(fromDate)&"-"&Day(fromDate)
        whereClause = whereClause & "AND dateCreated BETWEEN '"&fromDate&"' AND '"&toDate&"' "
ElseIf Session("dateRange") = "6 Months" Then
        fromDate = DateAdd("m",-6,Date())
        fromDate = Year(fromDate)&"-"&Month(fromDate)&"-"&Day(fromDate)
        whereClause = whereClause & "AND dateCreated BETWEEN '"&fromDate&"' AND '"&toDate&"' "
ElseIf Session("dateRange") = "1 Year" Then
        fromDate = DateAdd("yyyy",-1,Date())
        fromDate = Year(fromDate)&"-"&Month(fromDate)&"-"&Day(fromDate)
        whereClause = whereClause & "AND dateCreated BETWEEN '"&fromDate&"' AND '"&toDate&"' " 
End If

Оригинальный вопрос:

Простой вопрос, но почему-то я не могу заставить это работать.

У меня есть окно поиска, рядом с которым находится меню выбора диапазона дат, чтобы пользователь мог искать фотографии за последние 1, 6 или 12 месяцев.

То, что у меня есть, не является ошибкой, но не дает результатов, когда оно должно это сделать, вот оно:

WHERE dateCreated BETWEEN "&DateAdd("m",-6,Date())&" AND "&Date()&"

Вывод SQL выдает это:

dateCreated BETWEEN 18/03/2011 AND 18/09/2011 ORDER BY dateCreated DESC

Поле базы данных dateCreated установлено на (Date INDEX).

Кто-нибудь может увидеть, что не так?

Ответы [ 5 ]

31 голосов
/ 19 сентября 2011

Даты в полученном SQL должны быть заключены в одинарные кавычки.Попробуйте окружить динамические части вашего запроса кавычками.Примерно так:

WHERE dateCreated BETWEEN '"&DateAdd("m",-6,Date())&"' AND '"&Date()&"'

, который, как я предполагаю, выдает этот SQL:

dateCreated BETWEEN '18/03/2011' AND '18/09/2011' ORDER BY dateCreated DESC

Кроме того, посмотрите, можете ли вы найти способ форматирования дат в более привычном MySQL yyyy-mm-dd формат.Как это:

dateCreated BETWEEN '2011-03-18' AND '2011-09-18' ORDER BY dateCreated DESC
7 голосов
/ 19 сентября 2011

Если вы специально смотрите назад от «сейчас», почему бы не сделать

where DateCreated >= DATE_SUB( CURDATE(), INTERVAL 1 MONTH )
where DateCreated >= DATE_SUB( CURDATE(), INTERVAL 6 MONTH )
where DateCreated >= DATE_SUB( CURDATE(), INTERVAL 12 MONTH )

Нет необходимости в «диапазоне», просто вставьте диапазон месяца, который вы хотите разрешить ...

2 голосов
/ 19 сентября 2011

%d-%m-%Y не является надлежащим форматом даты, и значения даты в MySQL всегда должны указываться в одинаковых строках и в формате ISO 8601 ('%Y-%m-%d').18/03/2011 будет интерпретироваться как просто 18, деленное на 03 и 2011, что дает примерно 0.002….

То есть ваш SQL должен быть похож на следующую форму:

dateCreated BETWEEN '2011-03-18' AND '2011-09-18' ORDER BY dateCreated DESC
0 голосов
/ 19 сентября 2011

Если эти строки не заключены в кавычки, я полагаю, что вы на самом деле просто делите, а затем сравниваете даты между очень маленькими временными рамками.

0 голосов
/ 19 сентября 2011

Не уверен, какую технологию вы используете для DateAdd(), но ваш конечный формат даты неверен, в дополнение к тому факту, что ваши значения даты не заключены в одинарные кавычки.

MySQL сравнивает даты как 2011-03-18 not 18/03/2011.

Примечание, что вы можете сделать это в MySQL с его функциями даты и времени .Хотя это может сохранить кеширование запроса.

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