#mysql #sql #date #select
#mysql #sql #Дата #выберите
Вопрос:
Я использовал следующий запрос для получения информации, превышающей 2012 год, но я не получаю правильные данные при сравнении с датой, пожалуйста, дайте мне правильный запрос? ЗАПРОС MYSQL:
SELECT a.invoiceno,
a.invoicerefno,
a.invoicedate,
c.companyname,
a.grandtotal,
a.twempname,
itemdescription,
quantity
FROM twsql_twalldata.t_invoicedet a
INNER JOIN twsql_twalldata.t_salesinv_items b ON a.invoiceno=b.invoiceno
INNER JOIN twsql_twalldata.t_customerdet c ON a.customercode=c.customercode
WHERE a.twempname NOT LIKE '%Auto%'
AND itemdescription LIKE '%AMC%'
OR itemdescription LIKE '%annual maintenance contract%'
AND invoicecancelled=0
AND a.invoicedate > '2012-04-01 00:00:00';
Комментарии:
1. Какой тип invoicedate в таблице?
Ответ №1:
Попробуйте это:
SELECT a.invoiceno,
a.invoicerefno,
a.invoicedate,
c.companyname,
a.grandtotal,
a.twempname,
itemdescription,
quantity
FROM twsql_twalldata.t_invoicedet a
INNER JOIN twsql_twalldata.t_salesinv_items b ON a.invoiceno=b.invoiceno
INNER JOIN twsql_twalldata.t_customerdet c ON a.customercode=c.customercode
WHERE a.twempname NOT LIKE '%Auto%' AND
(itemdescription LIKE '%AMC%' OR itemdescription LIKE '%annual maintenance contract%') AND
invoicecancelled=0 AND DATE(a.invoicedate) > DATE('2012-04-01');
Ответ №2:
Если invoicedate
тип данных — datetime, то вам потребуется одно исправление, то есть использование правильных круглых скобок для условия ИЛИ.
WHERE
a.twempname NOT LIKE '%Auto%'
AND ( itemdescription LIKE '%AMC%' OR itemdescription LIKE '%annual maintenance contract%')
AND invoicecancelled=0
AND a.invoicedate > '2012-04-01 00:00:00';
Ответ №3:
изменить:
AND a.invoicedate > '2012-04-01 00:00:00';
Для:
AND a.invoicedate > STR_TO_DATE('2012-04-01 00:00:00','%Y-%m-%d' %h:%i:%s')
Ответ №4:
Первая проблема заключается в том, что у вас нет обязательных круглых скобок, т. Е. ваше условие ИЛИ должно быть помещено внутри скобок.
SELECT a.invoiceno,
a.invoicerefno,
a.invoicedate,
c.companyname,
a.grandtotal,
a.twempname,
itemdescription,
quantity
FROM twsql_twalldata.t_invoicedet a
INNER JOIN twsql_twalldata.t_salesinv_items b ON a.invoiceno=b.invoiceno
INNER JOIN twsql_twalldata.t_customerdet c ON a.customercode=c.customercode
WHERE a.twempname NOT LIKE '%Auto%'
AND (itemdescription LIKE '%AMC%' OR itemdescription LIKE '%annual maintenance contract%')
AND invoicecancelled=0
AND a.invoicedate > '2012-04-01';
Вторая проблема может заключаться в том, что ваш invoicedate не имеет типа date
или datetime
тогда вам нужно сначала преобразовать его в date
, а затем сравнить
AND STR_TO_DATE(a.invoicedate, '%Y-%m-%d') > '2012-04-01';
Если это второй случай, я бы посоветовал вам указать это поле date или datetime.