Невозможно установить номер строки по дате - PullRequest
0 голосов
/ 17 января 2019

Я сейчас пытаюсь дать моим строкам в следующей таблице индекс

    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 голосов
/ 17 января 2019

Надеюсь, ваш формат даты - дд.мм.гггг. так что вы можете ниже запрос может помочь вам

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
0 голосов
/ 17 января 2019

Неправильное преобразование, попробуйте найти неверные значения

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)
...