我目前正在尝试为下表中的行提供索引
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
有人可以解释为什么吗?
答案 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