【问题标题】:Converting the given minutes to hh:mm:ss format将给定的分钟转换为 hh:mm:ss 格式
【发布时间】:2019-03-16 14:31:30
【问题描述】:

这是我的数据库结构(简化):

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

【问题讨论】:

  • 显示您用来查看数据的代码。
  • SELECT TOP (1000) [MovieID] ,[Duration] FROM [MovieDB].[dbo].[Movies]

标签: sql sql-server tsql management-studio-express


【解决方案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,

【讨论】:

  • 是的,实际上它不应该是time(7),但是在更改为timetime(0) 之后,我仍然得到7 个零
  • @user3132457 。 . .您可以将值转换为字符串(如第一个示例中所示)以获得您想要的。
  • 还是一样
  • @user3132457 。 . .使用convert(varchar(8), duration, 108) 是不可能得到小数秒的。您需要在选择数据时执行此操作,而不是在插入数据时执行此操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
  • 2022-11-23
  • 2015-12-29
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
相关资源
最近更新 更多