2017-12-04 35 views
0

私はSQLクエリに苦しんでいます - 選択出力でUTC時間変換を持つ基本的なSELECT文です。私はこれを検索し、それらのすべてを介して、次のクエリに到着しましたが、それは私のために動作していないようです。魔法が起こっすべき場所SQLクエリ出力のUTC時刻のLOCALへの変換

SELECT [Id] 
     ,[BaseSource] 
     ,[Source] 
     ,[Output] 
     ,[SessionId] 
     ,[Timestamp] 
     ,(SELECT DATEADD(MILLISECOND,DATEDIFF(MILLISECOND,getutcdate(),GETDATE()),[Timestamp])) as LocalTime 
    FROM [MYDB].[dbo].[SystemOutput] 
    ORDER BY [Timestamp] DESC 

この行はあるが、代わりに私は何の変換は全く起こっていない、タイムスタンプ列の値の完全一致を得る:

( DATEADD(ミリ秒、SELECT

これを取得する方法を知っている人はいますか?ありがとうございました。ありがとうございました。ありがとうございました。ありがとうございました。クエリを実行していない人の -

おかげ

+0

これは良いアプローチではありません。これは、SQL Server *のタイムゾーン*が必要であると仮定しています。また、* current * offsetはすべての値に適用可能であると仮定しています。多くの場合、そうではありません(たとえば、DSTのため)。あなたは実際に何をしたいのかを教えてください(その「ローカル」は何ですか?)また、どのバージョンのSQL Serverを使用していますか? –

+0

こんにちは、返信いただきありがとうございます。まず、私は自分のクエリを作成し、この特定のテーブルの出力をより読みやすくするために、自分の個人的/開発的な使い方であることを強調したいと思います。タイムスタンプ通常、UTC時刻の変換はアプリケーションレベルで行われているため、SQLクエリー内でdatetime変換を行うことは間違いありません。私が探しているのは、SELECT出力のタイムスタンプからローカル(またはPST時間)を取得することです。私は、本番環境のSQL 2016サーバーに当たっています。 – Nugs

答えて

2

まず、getdate()は、ローカルの日付と時刻サーバーのを返すことを理解しています。サーバーのタイムゾーンがUTCに設定されている場合、実際にはUTC時刻が返されます。

次のようにSQL 2016で実行されている、とあなたは太平洋時間に変換UTC時刻を求めているので、私は、あなたがビルトインAT TIME ZONEステートメントを使用することをお勧め:

SELECT [Id] 
     ,[BaseSource] 
     ,[Source] 
     ,[Output] 
     ,[SessionId] 
     ,[Timestamp] 
     ,[Timestamp] AT TIME ZONE 'UTC' AT TIME ZONE 'Pacific Standard Time' AS LocalTime 
FROM [MYDB].[dbo].[SystemOutput] 
ORDER BY [Timestamp] DESC 

注、上記[Timestamp]フィールドがdatetimeまたはdatetime2であり、UTCベースの値であることを前提としています。最初のAT TIME ZONEは、指定された値がUTCであることをアサーションし、結果としてdatetimeoffsetとなります。 2番目のAT TIME ZONEは、UTCから太平洋時間に変換されます。

代わりにフィールドには、クエリがさらに簡単で、すでにdatetimeoffsetタイプの場合:

SELECT [Id] 
     ,[BaseSource] 
     ,[Source] 
     ,[Output] 
     ,[SessionId] 
     ,[Timestamp] 
     ,[Timestamp] AT TIME ZONE 'Pacific Standard Time' AS LocalTime 
FROM [MYDB].[dbo].[SystemOutput] 
ORDER BY [Timestamp] DESC 

また、時間帯識別子に単語「標準」に惑わされてはいけません。その値は、米国とカナダの太平洋標準時間帯に該当する標準時と夏時間の両方をカバーします。

+0

あなたは男です!これはまさに私が必要としていたものです。どうもありがとうございました! – Nugs

関連する問題