ms sql server下unix时间戳函数unix_timestamp, from_unixtime(与mysql兼容)

直接上代码:

CREATE FUNCTION UNIX_TIMESTAMP (@ctimestamp datetime) RETURNS integer 
AS
BEGIN
  /* Function body */
  declare @return integer
  SELECT @return = DATEDIFF(SECOND,{d '1970-01-01'}, @ctimestamp)
  return @return
END


CREATE FUNCTION from_unixtime (@ts integer) RETURNS datetime 
AS
BEGIN
  /* Function body */
  declare @return datetime
  select @return = DATEADD(second, @ts, {d '1970-01-01'})
  return @return
END

用法

跟MySQL下的一样类似:

select dbo.UNIX_TIMESTAMP('2013-1-1')
select dbo.from_unixtime(2145000000)

感谢参考 http://skinn3r.wordpress.com/2009/01/26/t-sql-datetime-to-unix-timestamp/

php中ms sql server日期时间类型转换成 unix时间戳

写一个转换程序,旨在把一套asp+mssql博客系统数据迁移到php+mysql系统下,需要转换日期类型(mssql数据库里的日期时间类型datetime值)为unix时间戳,但发现mssql里读取到的时间通过

$dateline=(int)strtotime($row['addtime']);

转换,得到的值是0,很奇怪;检查后发现,$row['addtime']的时间格式不太正常,形式如下:
06 28 2007 2:21PM
11 3 2005 12:52AM
03 18 2010 1:08AM
11 4 2005 12:56PM
01 23 2010 11:02AM

或许在php.ini里有mssql库的设置参数,可以设置日期时间类型的格式,但是绝大多数php环境配置都是默认状态的配置,于是需要通过程序兼容这个事实。

从mssql查询的sql语句做一下修改即可以:
$sql="SELECT [logid]
,convert(varchar(500),[topic]) as topic
,convert(text,[logtext]) as logtext
,[userid]
,[authorid]
,convert(varchar(100),[author]) as author
,convert(varchar(30),[addtime],120) as addtime
,[truetime]....."
---mssql数据库里的日期时间类型datetime值,使用php的mssql库读取得到的
----------更多的转换格式参看这里-------------------------------
使用 CONVERT:

CONVERT (data_type[(length)], expression [, style])
select CONVERT(varchar, getdate(), 120 )
2004-09-12 11:06:08

select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),\'-\',\'\'),\' \',\'\'),\':\',\'\')
20040912110608

select CONVERT(varchar(12) , getdate(), 111 )
2004/09/12

select CONVERT(varchar(12) , getdate(), 112 )
20040912

select CONVERT(varchar(12) , getdate(), 102 )
2004.09.12

select CONVERT(varchar(12) , getdate(), 101 )
09/12/2004

select CONVERT(varchar(12) , getdate(), 103 )
12/09/2004

select CONVERT(varchar(12) , getdate(), 104 )
12.09.2004

select CONVERT(varchar(12) , getdate(), 105 )
12-09-2004

select CONVERT(varchar(12) , getdate(), 106 )
12 09 2004

select CONVERT(varchar(12) , getdate(), 107 )
09 12, 2004

select CONVERT(varchar(12) , getdate(), 108 )
11:06:08

select CONVERT(varchar(12) , getdate(), 109 )
09 12 2004 1

select CONVERT(varchar(12) , getdate(), 110 )
09-12-2004

select CONVERT(varchar(12) , getdate(), 113 )
12 09 2004 1

select CONVERT(varchar(12) , getdate(), 114 )
11:06:08.177