将月,周,日转换为unix时间戳

时间:2015-04-20 18:56:11

标签: sql sql-server unix-timestamp

在MSSQL中,我如何获取以下信息并将其转换为unix时间戳?

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

这将基于当前年份(或任何特定年份)。我发现各种sql查询将实际的年/月/日从整数组件转换为unix时间戳,但没有像我这里的那样。

与背景一样,这将用于包含时间区信息的数据库中,该时区信息存储在上面的列中,表示DST的开始和停止。我需要能够告诉我的开发人员如何获取这些值并将它们转换为可以在其他查​​询中使用的时间戳。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如果您想在3月的第二个星期日上午2:00转换为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;