Verwenden von SQL Server 2016. Dies ist in einem SP für einen Bericht. Bei Angabe des Datumsbereichs vom 22.02.2017 enthält der Bericht Positionen für den 21.02.2017. Datumsangaben werden in der Datenbank als DateTimeOffset gespeichert.Verwenden von Datetimeoffset-Datumsangaben im Where-Klausel-Datumsbereichsfilter
In dieser Abfrage möchte ich am 22. zurückkehren, aber ich werde auch 21..
@start und @end repräsentieren den vom Benutzer eingegebenen Datumsbereich. @storeddate ist das Datum aus der Datenbank, die zum Filtern des Berichts verwendet wurde. Mein Plan ist, das Versetzungsdatum umzuwandeln, dann den "Datum" Teil heraus zu ziehen, um zu filtern, aber es funktioniert nicht.
declare @start date = '2017-02-22';
declare @end date = '2017-02-22';
declare @storeddate datetimeoffset = '2017-02-22 00:00:19.0000000 +00:00';
;with dates as
(
select @storeddate as 'raw'
, @storeddate AT TIME ZONE 'Pacific Standard Time' as offset
, CONVERT(datetime, @storeddate) AT TIME ZONE 'Pacific Standard Time' as dt
, CONVERT(datetime, @storeddate AT TIME ZONE 'Pacific Standard Time') as d
, CAST(CONVERT(datetime, @storeddate) AT TIME ZONE 'Pacific Standard Time' as date) as 'casted'
, @start as 'start'
, @end as 'end'
)
select * from dates
WHERE (
CAST(CONVERT(datetime, @storeddate) AT TIME ZONE 'Pacific Standard Time' as date) >= @start
AND CAST(CONVERT(datetime, @storeddate) AT TIME ZONE 'Pacific Standard Time' as date) < DATEADD(day, 1, @end))
bearbeiten Notiz hinzufügen:
Seine Art einer ungeraden Szenario. Dies ist eine Intranet-Web-App, die nur in Oregon verwendet wird. Der Webentwickler verwendete eine Javascript-Datepicker-Bibliothek, die alle seine Daten in UTC änderte und er konnte nicht herausfinden, wie man sie zurücksetzte, so dass er sie einfach in der db als datetimeoffset speicherte. Jetzt muss ich alle Berichte ändern, um die richtigen Daten anzuzeigen. Die 'Zeitzone' hat die Anzeige der Daten in den Berichten korrigiert, funktioniert jedoch nicht in den where-Klauseln für die Datumsbereichsfilter.
Seine Art einer ungeraden Szenario. Dies ist eine Intranet-Web-App, die nur in Oregon verwendet wird. Der Webentwickler verwendete eine Javascript-Datepicker-Bibliothek, die alle seine Daten in UTC änderte und er konnte nicht herausfinden, wie man sie zurücksetzte, so dass er sie einfach in der db als datetimeoffset speicherte. Jetzt muss ich alle Berichte ändern, um die richtigen Daten anzuzeigen. Die 'Zeitzone' hat die Anzeige der Daten in den Berichten korrigiert, funktioniert jedoch nicht in den where-Klauseln für die Datumsbereichsfilter. – BattlFrog
Verwenden Sie die Funktion "dateadd", um den Offset zu ermitteln, anstatt sich auf "Zeitzone" zu verlassen. Ich denke, das betrifft nur die Anzeige, nicht die Art, wie das Datum gespeichert wird. Ich versuche ein Beispiel einzufügen und habe Formatierungsprobleme. –