#sql #sql-server #tsql #management-studio-express
#sql #sql-сервер #tsql #управление-studio-express
Вопрос:
Вот моя структура базы данных (упрощенная):
if db_id('MovieDB') is null
create database MovieDB;
go
use MovieDB;
go
if object_id(N'Movies', N'U') is null
create table Movies
(
MovieID bigint not null identity primary key,
Duration time(7) not null,
);
insert into Movies values
(format(dateadd(minute, 142, 0), N'hh:mm:ss', 'en-US'));
Я вставил продолжительность в виде минут, и мне нужно, чтобы она была преобразована в hh:mm:ss
формат. Однако при выполнении этого я получаю 02:22:00.0000000
.
Как я могу отформатировать дату, чтобы получить просто 02:22:00
?
Комментарии:
1. Покажите код, который вы используете для просмотра данных.
2.
SELECT TOP (1000) [MovieID] ,[Duration] FROM [MovieDB].[dbo].[Movies]
Ответ №1:
Вы могли бы преобразовать во время:
select convert(time, dateadd(minute, 142, 0))
Или, если вам нужно значение в виде строки, вы можете использовать старомодный convert()
:
select convert(varchar(8), dateadd(minute, 142, 0), 108)
Но я в замешательстве. Вы сохраняете значение как time
с 7 цифрами, состоящими из долей секунды. Затем вы жалуетесь на то, что видите доли секунды.
Доли секунды, вероятно, не имеют значения для времени просмотра, так почему бы просто не использовать:
Duration time(0) not null,
Комментарии:
1. да, на самом деле этого не должно быть
time(7)
, но после изменения наtime
илиtime(0)
я все еще получаю 7 нулей2. @user3132457 . . . Вы можете преобразовать значение в строку (как в первом примере), чтобы получить именно то, что вы хотите.
3. это все то же самое
4. @user3132457 . . . С помощью
convert(varchar(8), duration, 108)
невозможно получить доли секунды. Это нужно делать при выборе данных, а не при их вставке.