SQL 到月底限制
SQL LIMIT by end of the month
我有一些代码:
$sql = "SELECT * FROM palash ORDER BY id DESC LIMIT 31";
我希望 LIMIT 31
成为 LIMIT END OF THE MONTH
您可以使用以下条件限制为当月:
SELECT *
FROM palash
WHERE MONTH(my_date_column) = MONTH(CURDATE())
AND YEAR(my_date_column) = YEAR(CURDATE())
然后您可以调整它以获取以前的日期。
编辑/其他方式:为了接近你最初的想法并仍然有一个完整的SQL解决方案,你可以通过LAST_DAY获得当月的天数:
DAY(LAST_DAY(my_date_column))
Takes a date or datetime value and returns the corresponding value for
the last day of the month. Returns NULL if the argument is invalid.
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
避免像 OlivierH 那样的解决方案(无意冒犯,Olivier)。应用于列的函数使 MySQL 无法使用索引。
这是您可以做到的一种方法
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
我有一些代码:
$sql = "SELECT * FROM palash ORDER BY id DESC LIMIT 31";
我希望 LIMIT 31
成为 LIMIT END OF THE MONTH
您可以使用以下条件限制为当月:
SELECT *
FROM palash
WHERE MONTH(my_date_column) = MONTH(CURDATE())
AND YEAR(my_date_column) = YEAR(CURDATE())
然后您可以调整它以获取以前的日期。
编辑/其他方式:为了接近你最初的想法并仍然有一个完整的SQL解决方案,你可以通过LAST_DAY获得当月的天数:
DAY(LAST_DAY(my_date_column))
Takes a date or datetime value and returns the corresponding value for the last day of the month. Returns NULL if the argument is invalid.
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
避免像 OlivierH 那样的解决方案(无意冒犯,Olivier)。应用于列的函数使 MySQL 无法使用索引。
这是您可以做到的一种方法
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