#sql-server #datetime
Вопрос:
Я попытался преобразовать varchar
переменную, хранящуюся в моей базе данных, HH:MM:SS
в фактический datetime
формат HH:MM:SS. Я действительно получил значение HH:MM:SS, но попытка также сопровождалась префиксом ГГГГ:ММ:ДД вместе с ожидаемым результатом.
Ниже приведен код, который я использовал для преобразования этого varchar
значения в HH:MM:SS, и полученный результат.
Код, который я пробовал :
DECLARE @Duration Varchar(10)
SET @Duration = '00:01:23'
SELECT CONVERT(datetime, Duration, 8) AS duration
Результат, который я получил :
1900-01-01 00:01:23.000
Ожидаемый результат:
00:01:23
Пожалуйста, дайте мне знать, что в этом нужно изменить. Спасибо!
Комментарии:
1. Это неверное ожидание. Это не дата-время, это всего лишь время. Продолжительность-это не свидание. Это тоже не префиксы —
datetime
,date
,time
и т. Д. Являются двоичными типами, а не строками2. Похоже, вам нужен тип данных time, а не тип данных datetime
Ответ №1:
Если вы хотите time
, почему вы переходите в datetime
? Учитывая название, неудивительно, что вы получаете и дату, и время. Попробуй:
DECLARE @Duration char(8) = '00:01:23';
SELECT duration = CONVERT(time(0), @Duration);
Результаты:
Продолжительность |
---|
00:01:23 |
- Пример бд<>скрипка<>
Просто имейте в виду, что time
(как и любой тип даты/времени) не предназначен для представления продолжительности или интервала. Потому что что происходит, когда ваша продолжительность или интервал превышают 24 часа?
Комментарии:
1. Это немного … необычно, что SQL Server еще не имеет правильного типа интервала
2. @PanagiotisKanavos Да, но, честно говоря, добавлять типы сложно. Типы, добавленные в 2008 году, не совсем имели идеальный послужной список, и с тех пор они не пробовали.
3. Спасибо всем вам за оперативную помощь. Я был немного сбит с толку этим, но ваш код помог мне. еще раз спасибо!
Ответ №2:
То, что вы опубликовали, — это время, а не дата или время. Продолжительность-это не свидание. Типы дат являются двоичными, у них нет префиксов.
Вы можете определить время непосредственно с помощью :
Declare @Duration time ='00:01:23'
Или вы можете привести строку ко времени:
Declare @Duration varchar(10)
Set @Duration = '00:01:23'
Select cast(@Duration as time) as duration
или
Declare @Duration varchar(10)
Set @Duration = '00:01:23'
Select convert(time, @Duration,8) as duration
К сожалению, это не продолжительность, а время суток. Он может хранить значения только между 00:00
и 23:59:59.9999999
.
SQL Server не имеет типа интервала/продолжительности.
Комментарии:
1. Спасибо вам за вашу помощь! эти комментарии мне очень помогли!
Ответ №3:
Declare @Duration Varchar(10)
Set @Duration = '00:01:23'
select convert(time,@duration,8);
Комментарии:
1. Спасибо вам за ответ! 🙂