Link to home
Start Free TrialLog in
Avatar of RIAS
RIASFlag for United Kingdom of Great Britain and Northern Ireland

asked on

Replace Dates in query

Hello,

Replace dates in the query :
;WITH CTE_OnlyDates
AS
(      SELECT GuestName, ArrivalDate, DepartureDate 
       FROM CORRESPONDENCE
       WHERE ISDATE(DepartureDate) = 1
)
SELECT GuestName, ArrivalDate, DepartureDate 
FROM CTE_OnlyDates
WHERE CONVERT(date,ArrivalDate,120) >= '01-01-2016'
       AND ((DepartureDate >= '01/01/2017')
       AND (CONVERT(date,ArrivalDate,120) >= '20170101' AND CONVERT(date,ArrivalDate,120) < '20170113') 
    OR (CONVERT(date,ArrivalDate,120) < '20170101' AND DepartureDate >= '13/01/2017'))

Open in new window


Replacement want is as follows

;WITH CTE_OnlyDates
AS
(      SELECT GuestName, ArrivalDate, DepartureDate 
       FROM CORRESPONDENCE
       WHERE ISDATE(DepartureDate) = 1
)
SELECT GuestName, ArrivalDate, DepartureDate 
FROM CTE_OnlyDates
WHERE CONVERT(date,ArrivalDate,120) >= '01-01-2016'
       AND ((DepartureDate >= Last FridayDate)
       AND (CONVERT(date,ArrivalDate,120) >= Last FridayDate AND CONVERT(date,ArrivalDate,120) < This FridayDate) 
    OR (CONVERT(date,ArrivalDate,120) < Last FridayDate AND DepartureDate >= ThisFridayDate)

Open in new window

Example: Last Friday date was 13-01-2017 and this friday date  will be 20-1-2017
Cheers
Avatar of Rgonzo1971
Rgonzo1971

Hi,

pls try
SELECT DATEADD(d,-1-(DATEPART(dw, GETDATE()) % 7),GETDATE()) AS Last_Friday
      ,DATEADD(d,-1-(DATEPART(dw,GETDATE()) % 7)+7,GETDATE()) AS This_Friday

Open in new window

Regards
Avatar of RIAS

ASKER

Hello Rgonzo,
Thanks but ,how do  iget date in place of the respective Friday's in the query  and also need to keep the format of Date similar to mentioned in the forst query.

Cheers
Avatar of RIAS

ASKER

Hello,

Last Friday:

SELECT CAST(DATEADD(day, 4, DATEADD(wk, DATEDIFF(wk, 0, GETDATE()), 0)) AS DATE)

This Friday:

   Select CAST(DATEADD(day, 11, DATEADD(wk, DATEDIFF(wk, 0, GETDATE()), 0)) AS DATE

Can anyone help on how to embed it in the above query.

Cheers
then try
DECLARE @Last_Friday DATETIME = DATEADD(d,-1-(DATEPART(dw,GETDATE()) % 7),GETDATE())
DECLARE @This_Friday as datetime = DATEADD(d,-1-(DATEPART(dw,getdate()) % 7)+7,GETDATE())
;WITH CTE_OnlyDates
AS
(      SELECT GuestName, ArrivalDate, DepartureDate 
       FROM CORRESPONDENCE
       WHERE ISDATE(DepartureDate) = 1
)
SELECT GuestName, ArrivalDate, DepartureDate 
FROM CTE_OnlyDates
WHERE CONVERT(date,ArrivalDate,120) >= '01-01-2016'
       AND ((DepartureDate >= CONVERT(date,@Last_Friday,120))
       AND (CONVERT(date,ArrivalDate,120) >=CONVERT(date,@Last_Friday,120)  AND CONVERT(date,ArrivalDate,120) <  CONVERT(date,@This_Friday,120) )
    OR (CONVERT(date,ArrivalDate,120) < CONVERT(date,@Last_Friday,120) AND DepartureDate >= CONVERT(date,@This_Friday,120) 
)

Open in new window

Avatar of RIAS

ASKER

ALTER PROCEDURE  [dbo].[SP_RptTravelWeekly]

AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;  





DECLARE @Last_Friday DATETIME = DATEADD(d,-1-(DATEPART(dw,GETDATE()) % 7),GETDATE())
DECLARE @This_Friday as datetime = DATEADD(d,-1-(DATEPART(dw,getdate()) % 7)+7,GETDATE())
;WITH CTE_OnlyDates
AS
(      SELECT GuestName, ArrivalDate, DepartureDate 
       FROM CORRESPONDENCE
       WHERE ISDATE(DepartureDate) = 1
)
SELECT GuestName, ArrivalDate, DepartureDate 
FROM CTE_OnlyDates
WHERE CONVERT(date,ArrivalDate,120) >= '01-01-2016'
       AND ((DepartureDate >= CONVERT(date,@Last_Friday,120))
       AND (CONVERT(date,ArrivalDate,120) >=CONVERT(date,@Last_Friday,120)  AND CONVERT(date,ArrivalDate,120) <  CONVERT(date,@This_Friday,120) )
    OR (CONVERT(date,ArrivalDate,120) < CONVERT(date,@Last_Friday,120) AND DepartureDate >= CONVERT(date,@This_Friday,120)))



	END 

Open in new window


Got Error:

Msg 241, Level 16, State 1, Procedure SP_RptTravelWeekly, Line 22
Conversion failed when converting date and/or time from character string.
Sorry can't help further
RIAS, first lets try without any convert function:
ALTER PROCEDURE  [dbo].[SP_RptTravelWeekly]
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;  

DECLARE @Last_Friday AS DATE = DATEADD(d,-1-(DATEPART(dw,GETDATE()) % 7),GETDATE())
DECLARE @This_Friday as date = DATEADD(d,-1-(DATEPART(dw,getdate()) % 7)+7,GETDATE())
;WITH CTE_OnlyDates
AS
(      SELECT GuestName, ArrivalDate, DepartureDate 
       FROM CORRESPONDENCE
       WHERE ISDATE(DepartureDate) = 1
)
SELECT GuestName, ArrivalDate, DepartureDate 
FROM CTE_OnlyDates
WHERE ArrivalDate >= '01-01-2016'
       AND ((DepartureDate >= @Last_Friday)
       AND (ArrivalDate >= @Last_Friday AND ArrivalDate <  @This_Friday)
    OR (ArrivalDate < @Last_Friday AND DepartureDate >= @This_Friday))

Open in new window

Avatar of RIAS

ASKER

Vitor,

Thanks Please let me convert that nvarchar ro date.
Will definitely get back
Avatar of RIAS

ASKER

Vitor,
Now that i have change the datatype to Date :

This query error:

Argument data type date is invalid for argument 1 of isdate function.
Argument data type date is invalid for argument 1 of isdate function.
I guess that because you changed the data type for that column during your previous question, right?
Avatar of RIAS

ASKER

yup
ASKER CERTIFIED SOLUTION
Avatar of Vitor Montalvão
Vitor Montalvão
Flag of Switzerland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of RIAS

ASKER

Cheers!