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);
13条答案
按热度按时间cyej8jka1#
sql server的
TIMESTAMP
数据类型与日期和时间无关!它只是一个连续的8字节整数的十六进制表示——它只适用于确保一行在被读取后没有改变。
你可以读出十六进制整数,或者如果你想要一个
BIGINT
. 例如:结果是
在较新版本的SQLServer中,它被称为
RowVersion
-因为事实就是这样。请参阅行版本上的msdn文档:是一种数据类型,它公开数据库中自动生成的唯一二进制数。rowversion通常用作表行的版本戳记机制。rowversion数据类型只是一个递增的数字,不保留日期或时间。要记录日期或时间,请使用datetime2数据类型。
因此不能转换sql server
TIMESTAMP
日期/时间-这不是日期/时间。但如果你说的是时间戳,但实际上你指的是
DATETIME
列-然后可以使用msdn帮助中“转换和转换”主题中描述的任何有效日期格式。sql server“开箱即用”定义并支持这些。不支持任何其他操作,例如,必须执行大量手动强制转换和连接(不推荐)。您要查找的格式有点像odbc规范(style=121):
给予:
sql server 2012最终将有一个
FORMAT
用于自定义格式的函数。。。。。。koaltpgm2#
我的同事帮了我:
或
jv4diomz3#
使用cast可以从时间戳字段获取日期:
ryevplcw4#
最简单的方法是:
这使日期列至少具有可读的格式。如果您想进一步更改te格式,请单击此处。
i1icjdpr5#
工作正常,除了以下信息:
不允许从数据类型varchar隐式转换为时间戳。使用convert函数运行此查询
所以是的,
TIMESTAMP
(RowVersion
)不是日期:)老实说,我自己也花了不少时间想办法把它变成约会。
最好的办法是把它转换成
INT
比较一下。这就是这种类型的含义。如果你想约会-只要加个
Datetime
专栏,从此幸福生活:)干杯,麦克
eiee3dmh6#
“你一直用这个词。我不认为这意味着你认为这意味着什么
时间戳与时间完全没有关系,正如marc\u最初所说。
注意,在输出中,ts(hex)为每条记录增加1,但实际时间间隔为10秒。如果它与时间有关,那么时间戳中会有一个缺口,与时间的差异相对应。
ulydmbyx7#
在转换为整数convert(bigint,[timestamp])作为时间戳之后,我得到如下结果
446701117 446701118 446701119 446701120 446701121 446701122 446701123 446701124 446701125 446701126
是的,这不是日期和时间,是序列号
sgtfey8w8#
for me works:to_date('19700101','yyyyymmdd')+(time/24/60/60)(oracle数据库)
flmtquvp9#
我对时间戳也有同样的问题,例如:'29-jul-20 04.46.42.000000000 pm'。我想把它变成'yyyy-mm-dd'格式。最终对我有效的解决方案是
从mytable中选择to_char(mytimestamp,'yyyy-mm-dd');
aij0ehis10#
我假设您已经将数据转储为insert语句,并且您(或者google上的任何人)正试图找出日期和时间,或者将其转换为其他地方使用(例如:转换为mysql insert)。这在任何编程语言中都是很容易的。
让我们来处理这个问题:
CAST(0x0000A61300B1F1EB AS DateTime)
这个十六进制表示实际上是两个独立的数据元素。。。日期和时间。前四个字节是日期,后四个字节是时间。日期为0x0000a613
时间为0x00b1f1eb
使用您选择的编程语言将这两个段转换为整数(这是一种直接的十六进制到整数的转换,每种现代编程语言都支持这种转换,因此,我不会浪费空间编写可能是您正在使用的编程语言,也可能不是您正在使用的编程语言的代码)。
0x0000a613的日期变为42515
0x00b1f1eb的时间变为11661803
现在,如何处理这些整数:
日期
日期自1900年1月1日起,以天表示。所以,把42515天加到1900年1月1日,结果是2016年5月27日。
时间
时间有点复杂。取该int并执行以下操作以获取午夜后的微秒时间(伪代码):
在那里,使用您的语言最喜欢的函数调用来翻译微秒(38872676666.7)µ(在上面的例子中)转化为时间。
结果是10:47:52.677
yrwegjxp11#
其中一些实际上是从SQLServer2008开始转换为日期时间的。
尝试以下sql查询,您将自己看到:
以上将导致
2009-12-30 09:51:03:000
但我也遇到过一些不符合约会时间的。vltsax2512#
为什么不试试
FROM_UNIXTIME(unix_timestamp, format)
?3pvhb19x13#
我不确定这里是否遗漏了什么,但你不能这样转换时间戳: