SQL 时间戳转DateTime类型

时间:2022-02-23 22:28:31

  最近在工作中通过接口获取时间字段为时间戳的值,直接入库后再页面查询时间格式时候需要通过SQL语句将时间戳格式装换为时间格式进行比较,首先我们需要知道时间戳格式是怎么产生的,: Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。Unix时间戳不仅被使用在Unix系统、类Unix系统中

  时间类型转换为时间戳会有10位和13位两种区别,10 位的时间戳的源时间格式为 yyyy-MM-dd hh:MM:ss .000  毫秒位数为三个零,而13位的时间戳格式是包含了毫秒数的。

  10位的时间戳格式在SQL中转换为普通时间格式的方法:DATEADD(s, Unix timestamp+8*3600, '1970-01-01 00:00:00')

  13 位的时间戳转换为普通时间格式不能直接使用这种方式,所以在这里我的做法是截取前边10位为无毫秒的时间格式的时间戳,所以写法:

    DATEADD(S,CAST( SUBSTRING(CreateTime,1,10) AS INT ) + 8 * 3600,'1970-01-01 00:00:00 ')  

  在SQL中普通时间格式转为时间戳格式:DATEDIFF(s, '1970-01-01 00:00:00', time)  

在不同的语言中实现的方式不同,参见 http://tool.chinaz.com/Tools/unixtime.aspx