Click here to Skip to main content
15,909,651 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more: , +
I have a table
SQL
register(Empname varchar(),punchadte varchar(40)).

I have created a SP and I pass year and month seperately.
I want to select rows based on year and month which are passed and read every rows.
Posted
Updated 4-Jun-12 20:22pm
v2

I think the DATEPART function can be used for this purpose as shown below:
SQL
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE GetRowsByYearAndMonth 
	@Year int , 
	@Month int 
AS
BEGIN
	SELECT * 
	FROM register
	WHERE DATEPART(YEAR,punchdate)= @Year AND DATEPART(MONTH,punchdate)=@Month
END
GO

--Pass the year and month like
EXEC GetRowsByYearAndMonth 1998, 5
 
Share this answer
 
Comments
Member 7909353 5-Jun-12 6:37am    
Here punchdate is not a singal value its collection of value i.e. column value.
Because when I run SELECT *
FROM register
WHERE DATEPART(YEAR,convert(datetime,(select PunchDate from InOutRegister)))= @Year AND DATEPART(MONTH,convert(datetime,(select PunchDate from InOutRegister)))=@Month
it gives an error....
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
VJ Reddy 5-Jun-12 6:58am    
Use TOP 1 to take the first row in the subquery as follows
(select TOP 1 PunchDate from InOutRegister)
Member 7909353 5-Jun-12 7:21am    
I want every row which satisfies condition year and month
SQL
ALTER PROCEDURE dbo.AttendenceReportSP

	(
	@Option int,
	@compname varchar(30),
	@deptname varchar(30),
	@year varchar(4),
	@month varchar(10)
	)
	
AS
begin



    declare @datetimestring varchar(30),@loccode varchar(30),@DateTime datetime,@years varchar(4),@months varchar(10),@ff varchar(12),@y int,@m int,@empcode int --declaration section
    
    if @option=0
       begin
       select @y=convert(int,@year)
       if @month=convert(varchar,'January')
       select @m=convert(int,'01')
       else if @month=convert(varchar,'February')
       select @m=convert(int,'02')
          else if @month=convert(varchar,'March')
       select @m=convert(int,'03')
          else if @month=convert(varchar,'April')
       select @m=convert(int,'04')
          else if @month=convert(varchar,'May')
       select @m=convert(int,'05')
          else if @month=convert(varchar,'June')
       select @m=convert(int,'06')
          else if @month=convert(varchar,'July')
       select @m=convert(int,'07')
          else if @month=convert(varchar,'August')
       select @m=convert(int,'08')
          else if @month=convert(varchar,'September')
       select @m=convert(int,'09')
          else if @month=convert(varchar,'October')
       select @m=convert(int,'10')
          else if @month=convert(varchar,'November')
       select @m=convert(int,'11')
          else if @month=convert(varchar,'December')
       select @m=convert(int,'12')
       
       
     select @ff=PunchDate from register
        select @DateTime=convert(datetime,@ff,101)
        select @years=DATEPART(year,convert(datetime,@DateTime))
        select @months=DATEPART(month,convert(datetime,@DateTime))
       select * from registerwhere @y=@years and @m=@months
       end
RETURN
end
 
Share this answer
 
SQL
SELECT *
    FROM register
    WHERE YEAR(punchdate)= @Year AND MONTH(punchdate)=@Month
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900