SQL LIMIT к концу месяца

У меня есть код со мной:

$sql = "SELECT * FROM palash ORDER BY id DESC LIMIT 31";

Я хочу LIMIT 31 быть LIMIT END OF THE MONTH

-2

Решение

Использовать LAST_DAY() функция.

Принимает значение даты или даты и времени и возвращает соответствующее значение для
последний день месяца. Возвращает NULL, если аргумент неверен.

mysql> SELECT LAST_DAY('2003-02-05');
-> '2003-02-28'
mysql> SELECT LAST_DAY('2004-02-05');
-> '2004-02-29'
mysql> SELECT LAST_DAY('2004-01-01 01:01:01');
-> '2004-01-31'
mysql> SELECT LAST_DAY('2003-03-32');
-> NULL

В вашем случае сделайте это:

SELECT *
FROM palash
WHERE your_date_column <= LAST_DAY(CURDATE())
ORDER BY id DESC

Избегайте решений, подобных Оливье (без обид, Оливье). Функции, применяемые к вашим столбцам, не позволяют MySQL использовать индекс.

1

Другие решения

Вы можете ограничить текущий месяц с этими условиями:

SELECT *
FROM palash
WHERE MONTH(my_date_column) = MONTH(CURDATE())
AND YEAR(my_date_column) = YEAR(CURDATE())

Затем вы можете настроить его, чтобы получить предыдущие даты тоже.

РЕДАКТИРОВАТЬ / Другой способ: чтобы оставаться близким к вашей первоначальной идее и по-прежнему иметь полное решение SQL, вы можете получить количество дней в текущем месяце с ПОСЛЕДНИЙ ДЕНЬ :

DAY(LAST_DAY(my_date_column))
0

Вот один из способов сделать это

CREATE TABLE [dbo].[Dates](
[DateColumn] [datetime] NULL
) ON [PRIMARY]INSERT INTO [dbo].[Dates]
([DateColumn])
VALUES
('2015-01-04 13:00:00'),
('2015-01-06 13:00:00'),
('2015-02-05 14:00:00')
GO

----Last Day of Current Month
Declare @LastDayOfCurrentMonth datetime = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))

SELECT  *
FROM    Dates
Where DateColumn < @LastDayOfCurrentMonth
0
По вопросам рекламы [email protected]