Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
bhanu2217
Starting Member
35 Posts |
Posted - 2009-11-30 : 05:13:47
|
what i have to do is, get a date from user and compared it with the date stored in db_delivery_details(delivery_date) table where status='Issued'before i compare i need to check in db_registration table what delivery_type of user is.If(delivery_type = 10 days) than add 10 days to the date of delivery_details.If(delivery_type = 15 days) than add 15 days to the date of delivery_details.If(delivery_type = 30 days) than add 30 days to the date of delivery_details.Once the date is added, i need to compare this date with user entered date, if it matches than return the result.I have 2 tables.Table1db_delivery_details.fk_mem_id varchardelivery_date varchar(DD-MM-YYYY)Table2db_registrationuserid varchardelivery_type varcharfk_mem_id and userid are primary key/Foreign Keyso basically i need a select query to do all this job.I tried writing stored procedure for this as given below but i am kind of lost now. I am new to sql programming.Date is is varchar DD-MM-YYYY format.Here is my stored procedure, please let me know where i am going wrong.set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROC dbo.[GetIncrementedDate] '17-11-2009'@deliveryDate VARCHAR(64)ASBEGIN SET NoCOunt ON DECLARE @ReqDate DATETIME DECLARE @ReqDate1 DATETIME DECLARE @noOfDays VARCHAR(20) DECLARE @SQL VARCHAR(1024) --Gets the date in the declared variable set dateformat dmy SELECT @ReqDate = CAST(delivery_end_date AS DATETIME), @noOfDays = delivery_type FROM db_registration Reg JOIN db_delivery_details DelDet ON userid=fk_mem_id WHERE DelDet.status='Issued' IF @noOfDays = '10 Days' BEGIN set dateformat dmy SELECT @ReqDate1 = dateadd(day,10,cast(@ReqDate as datetime)) END IF @noOfDays = '15 Days' BEGIN set dateformat dmy SELECT @ReqDate1 = dateadd(day,15,cast(@ReqDate as datetime)) END IF @noOfDays = '30 Days' BEGIN set dateformat dmy SELECT @ReqDate1 = dateadd(day,30,cast(@ReqDate as datetime)) END IF @ReqDate1 = CONVERT(DATETIME,@deliveryDate) BEGIN SET @SQL = 'SELECT * FROM db_registration Reg JOIN db_delivery_details DelDet ON userid=fk_mem_id WHERE DelDet.status=''Issued'''-- AND @ReqDate1 = @deliveryDate SELECT @SQL END ELSE BEGIN SET @SQL = 'SELECT 0' ENDEND www.JamboreeBliss.com |
|
|
madhivanan
Premature Yak Congratulator
22864 Posts |
Posted - 2009-11-30 : 06:04:21
|
| [code]set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROC dbo.[GetIncrementedDate] '17-11-2009'@deliveryDate VARCHAR(64)ASBEGIN SET NoCOunt ON DECLARE @ReqDate DATETIME DECLARE @ReqDate1 DATETIME DECLARE @noOfDays VARCHAR(20) DECLARE @SQL VARCHAR(1024) --Gets the date in the declared variable set dateformat dmy SELECT @ReqDate = CAST(delivery_end_date AS DATETIME), @noOfDays = delivery_type FROM db_registration Reg JOIN db_delivery_details DelDet ON userid=fk_mem_id WHERE DelDet.status='Issued' set dateformat dmy SELECT @ReqDate1 = dateadd(day,replace(@noofdays,' days','')*1,@ReqDate) SELECT * FROM db_registration Reg JOIN db_delivery_details DelDet ON userid=fk_mem_id WHERE DelDet.status='Issued'AND @deliveryDate = @ReqDate1[/code]MadhivananFailing to plan is Planning to fail |
 |
|
|
bhanu2217
Starting Member
35 Posts |
Posted - 2009-11-30 : 08:50:21
|
quote: Originally posted by madhivanan
set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGOALTER PROC dbo.[GetIncrementedDate] '17-11-2009'@deliveryDate VARCHAR(64)ASBEGIN SET NoCOunt ON DECLARE @ReqDate DATETIME DECLARE @ReqDate1 DATETIME DECLARE @noOfDays VARCHAR(20) DECLARE @SQL VARCHAR(1024) --Gets the date in the declared variable set dateformat dmy SELECT @ReqDate = CAST(delivery_end_date AS DATETIME), @noOfDays = delivery_type FROM db_registration Reg JOIN db_delivery_details DelDet ON userid=fk_mem_id WHERE DelDet.status='Issued' set dateformat dmy SELECT @ReqDate1 = dateadd(day,replace(@noofdays,' days','')*1,@ReqDate) SELECT * FROM db_registration Reg JOIN db_delivery_details DelDet ON userid=fk_mem_id WHERE DelDet.status='Issued'AND @deliveryDate = @ReqDate1 MadhivananFailing to plan is Planning to fail
Thanks for your help.I made few changes, instead of adding days i am subtracting it now.Its working but i have a problem.Here is my stored procedure:set ANSI_NULLS ONset QUOTED_IDENTIFIER ONGO--dbo.[GetIncrementedDate1] '17-11-2009'ALTER PROC dbo.[GetIncrementedDate1] --'05-12-2009'@deliveryDate VARCHAR(64)ASBEGIN SET NoCOunt ON DECLARE @ReqDate DATETIME DECLARE @ReqDate1 DATETIME DECLARE @noOfDays VARCHAR(20) DECLARE @SQL VARCHAR(1024) --Gets the date in the declared variable set dateformat dmy SELECT @ReqDate = CAST(DelDet.delivery_date AS DATETIME), @noOfDays = Reg.delivery_type FROM db_registration Reg JOIN db_delivery_details DelDet ON Reg.userid=DelDet.fk_mem_id WHERE DelDet.status='Issued' --set dateformat dmy --SELECT @ReqDate1 = dateadd(day,replace(10,'days','')*1,@ReqDate) --set @ReqDate1 = dateadd(day,0,@ReqDate) --set dateformat dmy select @ReqDate1, @ReqDate,CAST(@deliveryDate AS DATETIME)select @noOfDays IF @noOfDays = '10 Days' BEGIN set dateformat dmy SELECT * FROM db_registration Reg JOIN db_delivery_details DelDet ON Reg.userid=DelDet.fk_mem_id WHERE DelDet.status='Issued' AND CAST(delivery_date AS DATETIME) = dateadd(day,-10,CAST(@deliveryDate AS DATETIME)) END ELSE IF @noOfDays = '15 Days' BEGIN set dateformat dmy SELECT * FROM db_registration Reg JOIN db_delivery_details DelDet ON Reg.userid=DelDet.fk_mem_id WHERE DelDet.status='Issued' AND CAST(delivery_date AS DATETIME) = dateadd(day,-15,CAST(@deliveryDate AS DATETIME)) END ELSE IF @noOfDays = '30 Days' BEGIN set dateformat dmy SELECT * FROM db_registration Reg JOIN db_delivery_details DelDet ON Reg.userid=DelDet.fk_mem_id WHERE DelDet.status='Issued' AND CAST(delivery_date AS DATETIME) = dateadd(day,-30,CAST(@deliveryDate AS DATETIME)) END-- set dateformat dmy SELECT * FROM db_registration Reg JOIN db_delivery_details DelDet-- ON Reg.userid=DelDet.fk_mem_id -- WHERE DelDet.status='Issued' AND CAST(delivery_date AS DATETIME) = dateadd(day,-10,CAST(@deliveryDate AS DATETIME)) --WHERE DelDet.status='Issued' AND CAST(@deliveryDate AS DATETIME) = @ReqDate1 -- WHERE DelDet.status='Issued' AND CAST('25-11-2009' AS DATETIME) = '25-11-2009'ENDThe problem is hereset dateformat dmy SELECT @ReqDate = CAST(DelDet.delivery_date AS DATETIME), @noOfDays = Reg.delivery_type FROM db_registration Reg JOIN db_delivery_details DelDet ON Reg.userid=DelDet.fk_mem_id WHERE DelDet.status='Issued' This query returns multiple rows but i am able to access only the last row value from @ReqDate and @noOfDays. so not sure but i guess i need something like a while or for loop here to access multiple rows.www.JamboreeBliss.com |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2009-11-30 : 10:02:15
|
| thats because you're using variables to store values which can store only a single value. what you need is to store them in a table variable or temporary table and then join onto that in main query |
 |
|
|
bhanu2217
Starting Member
35 Posts |
Posted - 2009-11-30 : 23:36:07
|
quote: Originally posted by visakh16 thats because you're using variables to store values which can store only a single value. what you need is to store them in a table variable or temporary table and then join onto that in main query
Thank You.www.JamboreeBliss.com |
 |
|
|
|
|
|
|
|