代码之家  ›  专栏  ›  技术社区  ›  Lazloo Xp

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

  •  2
  • Lazloo Xp  · 技术社区  · 5 年前

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

        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 回复  |  直到 5 年前
        1
  •  2
  •   Stanislav Kundii    5 年前

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

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

    UPD

    当我应用“尝试转换”时,我不会得到任何错误

    三进制转换

    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)
    
        2
  •  0
  •   Anson Aricatt    5 年前

    希望您的日期格式是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