如何将SQL Server的时间戳列转换为date时间格式

由于SQL Server返回像'Nov 14 2011 03:12:12:947PM' ,是否有一些简单的方法来将string转换为date格式,如“Ymd H:我:S”。

到目前为止我使用

 date('Ymd H:i:s',strtotime('Nov 14 2011 03:12:12:947PM')) 

SQL Server的TIMESTAMP数据types与date和时间无关

这只是一个连续数字的二进制表示 – 它只是确保一行从读取以来没有改变。

在较新版本的SQL Server中,它被称为RowVersion – 因为这实际上就是这样。 请参阅ROWVERSION上的MSDN文档 :

是一种数据types,可以自动生成数据库中唯一的二进制数字。 rowversion通常用作版本标记表行的机制。 rowversion数据types只是一个递增的数字,并不保存date或时间 要loggingdate或时间,请使用datetime2数据types。

所以你不能将SQL Server TIMESTAMP转换成date/时间 – 这不是date/时间。

但是,如果您要说时间戳,但实际上是指DATETIME列 – 那么您可以使用MSDN帮助中CAST和CONVERT主题中描述的任何有效date格式。 这些是由SQL Server“开箱即用”定义和支持的。 其他任何东西都不被支持,例如,你必须做大量的手工投射和连接(不推荐)。

你正在寻找的格式看起来有点像ODBC规范 (样式= 121):

 DECLARE @today DATETIME = SYSDATETIME() SELECT CONVERT(VARCHAR(50), @today, 121) 

得到:

 2011-11-14 10:29:00.470 

SQL Server 2012将最终有一个FORMAT函数做自定义格式化……

工作正常,除了这个消息:

从数据typesvarchar到时间戳的隐式转换是不允许的。 使用CONVERT函数来运行此查询

所以是的,TIMESTAMP(RowVersion) 不是date:)

说实话,我自己找了一个方法把它转换成date。

最好的办法是将其转换为INT并进行比较。 那是什么types的意思是。 如果你想要一个date – 只需添加一个date时间行,然后幸福的生活:)

欢呼的Mac

使用强制转换,您可以从时间戳字段获取date:

  SELECT CAST(timestamp_field AS DATE) FROM tbl_name 

其中一些实际上是从SQL Server 2009开始转换为date时间的。

尝试下面的SQL查询,你会看到自己:

 select CAST (0x00009CEF00A25634 as datetime) 

以上将导致2009-12-30 09:51:03:000,但是我遇到了实际上没有映射到date时间的那些。

我的同事帮助我:

 select CONVERT(VARCHAR(10), <tms_column>, 112), count(*) from table where <tms_column> > '2012-09-10' group by CONVERT(VARCHAR(10), <tms_column>, 112); 

要么

 select CONVERT(DATE, <tms_column>, 112), count(*) from table where <tms_column> > '2012-09-10' group by CONVERT(DATE, <tms_column>, 112); 

最简单的方法是:

 SELECT id,name,FROM_UNIXTIME(registration_date) FROM `tbl_registration`; 

这使得date列至less以可读的格式。 此外,如果你想改变te格式请点击这里 。

为什么不试试FROM_UNIXTIME(unix_timestamp,格式)

不知道如果我在这里错过了一些东西,但不能只是像这样转换时间戳:

 CONVERT(VARCHAR,CAST(ZEIT AS DATETIME), 110)