Sql server MSSQL RowNumber根据字符串生成的DateTime上的错误行号
我正在使用下面的sql查询,得到了意外的结果。这就好像sql是在字符串上生成一个行号,而不是在DateTime上,即使我已经将生成的ssString转换为DateTime。你能帮我把索引对齐吗? 多谢各位 SQL查询Sql server MSSQL RowNumber根据字符串生成的DateTime上的错误行号,sql-server,datetime,row-number,Sql Server,Datetime,Row Number,我正在使用下面的sql查询,得到了意外的结果。这就好像sql是在字符串上生成一个行号,而不是在DateTime上,即使我已经将生成的ssString转换为DateTime。你能帮我把索引对齐吗? 多谢各位 SQL查询 SELECT ROW_NUMBER() OVER (ORDER BY ((SELECT CAST(CAST(emd.DateOfMeasure AS DATE) AS NVARCHAR) + ' ' + CAST(DATEPART(HOUR, D
SELECT
ROW_NUMBER() OVER (ORDER BY ((SELECT CAST(CAST(emd.DateOfMeasure AS DATE) AS NVARCHAR) +
' ' + CAST(DATEPART(HOUR, DateOfMeasure) AS NVARCHAR) +
':' + CAST(DATEPART(MINUTE, DateOfMeasure) AS NVARCHAR) + ':00' AS DATETIME))) AS RowNum,
CAST((SELECT CAST(CAST(emd.DateOfMeasure AS DATE) AS NVARCHAR) +
' ' + CAST(DATEPART(HOUR, DateOfMeasure) AS NVARCHAR) +
':' + CAST(DATEPART(MINUTE, DateOfMeasure) AS NVARCHAR) + ':00' AS DATETIME) AS DATETIME) AS 'Date'
from Data emd
意外结果
Index DateTime
1 2013-10-16 00:30:00.000
2 2013-10-16 00:45:00.000
3 2013-10-16 01:00:00.000
4 2013-10-16 01:15:00.000
5 2013-10-16 01:30:00.000
6 2013-10-16 01:45:00.000
7 2013-10-16 10:00:00.000
8 2013-10-16 10:15:00.000
.
.
.
45 2013-10-16 19:30:00.000
46 2013-10-16 19:45:00.000
47 2013-10-16 02:00:00.000
48 2013-10-16 02:15:00.000
如评论中所述,我认为这是对您的查询的一个更简单的表述:
SELECT
ROW_NUMBER() OVER (
ORDER BY DATEADD(minute,DATEDIFF(minute,0,DateOfMeasure),0)) AS RowNum,
DATEADD(minute,DATEDIFF(minute,0,DateOfMeasure),0) AS 'Date'
from Data emd
它也表现出同样的奇怪吗?
DATEADD(minute,DATEDIFF(minute,0,GETDATE()),0)
返回当前日期和时间,秒数截断为0,并且继续将其视为datetime
而不是字符串。这就是你试图用那个丑陋的字符串操作所做的吗?不,我已经按日期、小时和分钟进行了分组。但也许我可以根据你的建议分组,所以如果上面的评论是正确的,你最好在非截断的时间内做行数。同一分钟内的行将获得一个任意的升序数,因此没有理由不使用实际的时间顺序。