I have a first date field based on utc-6 named date_utc_minus_6. I managed to create a new version of this field based on utc+1 named date_utc_1. Now what I am trying to do is to create two fields that truncate my date (the one based on utc+1) to the hour (upper and lower limit).
For example:
RECORD 1 :
date_utc_minus_6 = 02/07/2024 8:15 AM
date_utc_1 = 02/07/2024 2:15 PM
field_lower_limit = 02/07/2024 2:00 PM
field_upper_limit = 02/07/2024 3:00 PM
Here Is what I tried :
getdate() as date_utc_minus_6, /*system date field*/
date_utc_minus_6 AT TIME ZONE 'Central Standard Time' AT TIME ZONE 'Central European Standard Time' AS date_utc_1,
DATEADD(hour, DATEDIFF(hour, 1, date_utc_1), 0) as field_lower_limit,
DATEADD(hour, 1, field_lower_limit) as field_upper_limit
I do not understand why I get:
field_lower_limit = 02/06/2024 2:00 PM
field_upper_limit = 02/06/2024 3:00 PM
on 6th feb instead of 7th.
Does someone know where I should correct my code?
For the moment, it works with:
dateadd(day,1,DATEADD(hour, DATEDIFF(hour, 1, date_utc_1 ), 0)) as field_lower_limit
dateadd(day,1,DATEADD(hour, 1, field_lower_limit )) as field_upper_limit
BUt I'm not very confident about my code.
If you look at what
DATEDIFF(hour, 1, @date_utc_1)returns you'll see what is probably the problem. You're asking for the number of hours between 1 and today, which will be some big number.Try this instead,
This is using what I had available in SQL016 so there may be much better ways to do this later versions....
All we do here is get the date part only of the utc_1 date and then add the number of hours from Utc_1 and hours+1 for the upper value.
Here's a fiddle showing this in action, the first set of results are your current results. the last select is the modified version.
https://dbfiddle.uk/6yGn6iX4