SQL LIMIT到月底

时间:2015-01-20 13:13:38

标签: php sql limit

我有一些代码:

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

我希望LIMIT 31LIMIT END OF THE MONTH

3 个答案:

答案 0 :(得分:1)

使用LAST_DAY() function

  

采用日期或日期时间值并返回相应的值   这个月的最后一天。如果参数无效,则返回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 :(得分:0)

您可以使用以下条件限制当前月份:

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))

答案 2 :(得分: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