Конвертировать даты в MySql непонятно - PullRequest
1 голос
/ 31 марта 2019

Я использую MySql и по стандарту их формат даты 2019/03/31 в базе данных.

В моей программе .net, csharp я считал значения в переменную как 31/03/2019, поэтому str_date_format не будет работать, так как он принимает только вместо /.

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

Итак, прочитав руководство, я пришел к выводу, что мне нужно использовать date_format с разделителями в предложении where

SELECT 
    DATE_FORMAT(date_time,'%d-%m-%Y'), 
    AVG(Total), 
    SUM(Total_ly),  
    AVG((Total + Total_ly)/2) 
FROM transaction 
WHERE 
    date_format(date_time >=  @param1 , '%d-%m-%Y') 
    AND date_format(date_time <= @param2, '%d-%m-%Y') 
GROUP BY date_time;

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

Я отредактировал более подробно, надеюсь, это поможет, оцените любые советы в правильном направлении!

Ответы [ 3 ]

3 голосов
/ 31 марта 2019

Полагаю, вы на самом деле имеете в виду:

SELECT 
    DATE_FORMAT(date_time,'%d-%m-%Y'), 
    AVG(Total), 
    SUM(Total_ly),  
    AVG((Total + Total_ly)/2) 
FROM transaction 
WHERE 
    date_time >=  STR_TO_DATE('22/03/2019' , '%d/%m/%Y') 
    AND date_time <= STR_TO_DATE('24/03/2019', '%d/%m/%Y') 
GROUP BY date_time;

Подробности:

  • DATE_FORMAT() действительно можно использовать для преобразования даты и времени в строку ожидаемогоформат

  • STR_TO_DATE() преобразует строку в дату, учитывая спецификацию формата;Вы можете использовать его, чтобы преобразовать свои входные строки в даты, прежде чем сравнивать их со столбцом date_time.Или вы можете просто указать даты ввода в правильном формате: yyyy-mm-dd

3 голосов
/ 31 марта 2019

Я думаю, вы предполагаете, что предложение where будет:

where date_time >= '2019-03-22' and
      date_time <= '2019-03-24'

Не преобразовывать даты в строки для сравнения.

1 голос
/ 31 марта 2019

Используемый вами формат:

'%d-%m-%Y'

- не такой формат, как %Y-%m-%d.Но даже если это так, это:

date_format(date_time >=  "22-03-2019" , '%d-%m-%Y')

неверно, его следует записать как

date_format(date_time, '%d-%m-%Y') >=  "22-03-2019"  -- again not comparable.

. Вы можете делать все, что вам нужно, используя STR_TO_DATE() для преобразования строки вдата:

SET @start = '22/03/2019';
SET @end = '24/03/2019';
select 
  date_format(date_time,'%d/%m/%Y'), 
  AVG(Total), sum(Total_ly),  
  AVG((Total + Total_ly)/2) 
from Transaction 
WHERE date_time between STR_TO_DATE(@start, '%d/%m/%Y') AND STR_TO_DATE(@end, '%d/%m/%Y') 
Group By date_time;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...