2015-04-20 63 views
0

在MSSQL中,我將如何獲取以下幾條信息並將其轉換爲unix時間戳?將月,周,日轉換爲unix時間戳

  • 月= 3
  • Week_In_Month = 2
  • DAY_OF_WEEK = 1(一週的第一天是 星期日)
  • seconds_elapsed_during_day = 7200

這將基於當前的年(或任何給定年份)。我找到了各種sql查詢來將實際的年/月/日從整數組件轉換爲unix時間戳,但沒有像我在這裏。

就像背景一樣,這將用於包含存儲上述列的時區信息的數據庫,該列指示DST的啓動和停止。我需要能夠告訴我的開發人員如何獲取這些值並將它們轉換爲可用於其他查詢的時間戳。

在此先感謝您的幫助!

+0

DST開始/停止時間可能在不同的年份有所不同,你的數據庫模式是錯誤的,你不能將你的數據轉換成時間戳 –

+0

不幸的是,這不是「我的」模式,而是由供應商提供的,現在是我必須使用的模式。我認爲他們有一個過程來更新這個表,因爲有更改。如果我們假設他們(或我)會維護這張桌子,是否有解決方案? – jbomgard

+0

您無法使用不完整的數據,而是使用更多或更少的完整源代碼,如http://en.wikipedia.org/wiki/Tz_database –

回答

0

如果您想將3月的第二個星期日凌晨2點轉換爲Unix時間戳,則需要查找月份中的第二個星期日。這裏有一種方法:

with y as (
     select '2018' as yyyy 
    ) 
select dateadd(day, 
       15 - (case when datepart(weekday, yyyy+'-03-01') = 1 then 8 
          else datepart(weekday, yyyy+'-03-01') 
        end), 
       yyyy+'-03-01') 
from y; 

然後,你需要從這個值中減去1970-01-01得到在幾秒鐘之差,並加回7200:

with y as (
     select '2018' as yyyy 
    ) 
select datediff(second, '1970-01-01', 
       dateadd(day, 
         15 - (case when datepart(weekday, yyyy+'-03-01') = 1 then 8 
            else datepart(weekday, yyyy+'-03-01') 
           end), 
         yyyy+'-03-01' 
         ) 
       ) + 7200 
from y;