无法按日期时间排序设置行号

时间:2019-01-17 07:48:11

标签: sql sql-server tsql row-number

我目前正在尝试为下表中的行提供索引

    ticket_id(bigint)       val(nvarchar(4000)) 
    99856                   15.01.2019 16:58    
    99856                   15.01.2019 17:20    
    99921                   15.01.2019 17:31    
    100197                  16.01.2019 09:55    

索引应该由以下逻辑生成

    row_number() over (Partition by ticket_id Order by convert(datetime,val,104) asc) as nr

但是,此查询返回

  
    

从nvarchar数据类型到datetime数据类型的转换导致值超出范围。

  

当我使用以下查询时,它会起作用

    row_number() over (Partition by cast(ticket_id as int) Order by convert(datetime,val,104) asc) as nr

有人可以解释为什么吗?

2 个答案:

答案 0 :(得分:2)

转换不正确,请尝试查找错误的值

SELECT * FROM [youTable] WHERE TRY_CONVERT(datetime,val,104) IS NULL

upd

  

应用“ Try_convert”时,不会出现任何错误

TRY_CONVERT

Return Types
Returns a value cast to the specified data type if the cast succeeds; otherwise, returns null.

例如

SELECT TRY_CONVERT(datetime,'99.99.9999',104)

答案 1 :(得分:0)

我希望您的日期格式为dd.mm.yyyy。因此您可以在下面的查询中为您提供帮助

select convert (datetime ,'15.01.2019 16:58 ',103)

以您的情况

row_number() over (Partition by ticket_id Order by convert(datetime,val,103) asc) as nr