Оператор SQL с DATEPART и DATEADD не работает. Не распознаются сервером - PullRequest
0 голосов
/ 26 июня 2019

Попытка получить информацию о клиенте с сервера SQL с помощью PHP и подсчитать, сколько клиентов зарегистрировалось в прошлом месяце на основе даты, когда они зарегистрировались.Я хочу использовать DATEPART и DATEADD, чтобы указать параметры, которые я хочу получить для получения информации за последние месяцы, но сервер, похоже, не распознает эти параметры.В настоящее время использую MySQL 5.6.44.

Я знаю, что операторы типа

SELECT CLIENT_EMAIL 
FROM CLIENT_TABLE 
AND DATE_CLIENT_ADDED > (CURRENT_DATE() - INTERVAL 30 DAY)

работают, но это очень ограничивает

$con = mysqli_connect($Host, $User, $Password, $DB);

$getLastMonthEnrollments = "SELECT CLIENT_EMAIL FROM CLIENT_TABLE AND DATEPART(m, DATE_CLIENT_ADDED) = DATEPART(m, DATEADD(m, -1, getdate()))";
$tempQuery = mysqli_query($con, $getLastMonthEnrollments);
$LastMonthEnrollments = mysqli_num_rows($tempQuery);

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

FUNCTION my_DB.DATEPART не существует

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

1 Ответ

2 голосов
/ 26 июня 2019

Вы используете синтаксис SQL Server из своего кода Laravel, но базовой базой данных является MySQL. Вот ваш запрос, переписанный и исправленный:

SELECT CLIENT_EMAIL
FROM CLIENT_TABLE
WHERE MONTH(DATE_CLIENT_ADDED) = MONTH(CURDATE() - INTERVAL 1 MONTH);
...