如何将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)