SQL LIMIT到月底

I have some code with me:

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

I want the LIMIT 31 to be LIMIT END OF THE MONTH

Use the LAST_DAY() function.

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

In your case do this:

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

Avoid solutions like OlivierH's (no offense, Olivier). Functions applied on your columns make it impossible for MySQL to use an index.

You can limit to current month with this conditions :

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

You can then adjust it to get previous dates too.

EDIT / Other way : to stay close to your original idea and to still have a full SQL solution, you can get number of days in current month with LAST_DAY :

DAY(LAST_DAY(my_date_column))

Here is one way you can do it

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