#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() сработала! Спасибо за вашу поддержку 🙂