Преобразование заданных минут в формат hh: mm: ss

#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) невозможно получить доли секунды. Это нужно делать при выборе данных, а не при их вставке.