Вычисляемый столбец SQL: преобразовать varchar в time(3)

#sql #sql-server #sql-server-2017

#sql #sql-сервер #sql-server-2017

Вопрос:

У меня есть таблица [Time] , в которой есть столбец типа varchar(12) . Столбец содержит время в миллисекундах (пример: 14:08:16.483 ).

У меня также есть вычисляемый столбец [TimeValue] , который должен содержать преобразованную time(3) строку, содержащуюся в столбце [Time] , цель состоит в том, чтобы вычислить разницу во времени в миллисекундах между 2 записями

[Время] [Значение времени]
14:08:16.575 #ОШИБКА
14:08:16.483 #ОШИБКА

Я попробовал приведенные ниже формулы:

  • cast([Time] as time)
  • cast([Time] as datetime)
  • convert(datetime, [Time], 121)

Есть ли какой-либо способ решить эту проблему?

Спасибо за ваше время 🙂

Комментарии:

1. Я использую SQL Server 2017

2. Вы не можете вычислить столбец из нескольких строк напрямую. Вы могли бы создать некоторую функцию и использовать ее, но обычно это замедляет работу и затрудняет понимание. Если вам нужны такие данные только для создания отчетов, создайте просто представление.

Ответ №1:

В SQL Server вы можете использовать:

 select cast('14:08:16.575' as time(3))
 

Конечно, это тоже работает:

 select cast('14:08:16.575' as time)
 

В SQL Server вы бы использовали логику, подобную этой:

 alter table t add col_as_time as (try_cast(col_as_string as time(3)));
 

try_cast() Предотвращает ошибку.

Комментарии:

1. Мне нужна формула для вычисляемого столбца

2. Функция try_cast() сработала! Спасибо за вашу поддержку 🙂