从两个给定时间获取 hh:mm 格式时间的更好选择
Better option to get time in hh:mm format from two given time
select cast(datediff(minute,convert(time,'09:35 AM'),
convert(time,'07:06 PM'))/60 as varchar)
+':'+cast(datediff(minute,convert(time,'09:35 AM'),
convert(time,'07:06 PM'))%60 as varchar)
输出 : 9:31
我们有没有其他功能可以缩短上面的脚本。另外,我应该怎么做才能得到 09:31
而不是 9:31
的输出?
您可以在 Sql 服务器中使用 Format 功能。
更新 -(示例):这可能是您想要的:
select FORMAT(CONVERT(datetime,'9:31'),'HH:mm') AS 'time'
您可以将 CONVERT()
与样式 114 一起使用以获得 HH:mm
SELECT
CONVERT(nvarchar(5),
-- Get difference of time
CONVERT(datetime,'07:06 PM') - CONVERT(datetime,'09:35 AM')
, 114)
编辑
作为避免日期时间算法的注释
SELECT CONVERT(varchar(5),
DATEADD(minute,
DATEDIFF(minute, convert(time,'09:35 AM'), convert(time,'07:06 PM'))
, 0)
, 114)
DECLARE @time1 AS VARCHAR(8) = '09:35 AM'
DECLARE @time2 AS VARCHAR(8) = '07:06 PM'
SELECT
time1 = CAST(@time1 AS TIME),
time2 = CAST(@time2 AS TIME),
diff = DATEDIFF(MINUTE, @time1, @time2),
hh = RIGHT('00' + CAST(DATEDIFF(MINUTE, CAST(@time1 AS TIME), CAST(@time2 AS TIME))/60 AS VARCHAR(2)), 2),
mm = RIGHT('00' + CAST(DATEDIFF(MINUTE, CAST(@time1 AS TIME), CAST(@time2 AS TIME))%60 AS VARCHAR(2)), 2),
final = RIGHT('00' + CAST(DATEDIFF(MINUTE, CAST(@time1 AS TIME), CAST(@time2 AS TIME))/60 AS VARCHAR(2)), 2) + ':' +
RIGHT('00' + CAST(DATEDIFF(MINUTE, CAST(@time1 AS TIME), CAST(@time2 AS TIME))%60 AS VARCHAR(2)), 2)
当声明and/or转换为VARCHAR
类型时,您应该指定长度,否则SQL-服务器会为您分配一个默认值。有时是 1
,有时是 30
。有关详细信息,请参阅此 article。
另外,要将差异格式化为 hh:mm
,您需要用适当数量的零填充字符串。这是使用 :
RIGHT('00' + str, 2)
试试这个广告,看看这是否是您想要的:
SELECT FORMAT(GETDATE(),'hh:mm')
或
SELECT (CONVERT(VARCHAR(5), GETDATE(), 114))
select cast(datediff(minute,convert(time,'09:35 AM'),
convert(time,'07:06 PM'))/60 as varchar)
+':'+cast(datediff(minute,convert(time,'09:35 AM'),
convert(time,'07:06 PM'))%60 as varchar)
输出 : 9:31
我们有没有其他功能可以缩短上面的脚本。另外,我应该怎么做才能得到 09:31
而不是 9:31
的输出?
您可以在 Sql 服务器中使用 Format 功能。
更新 -(示例):这可能是您想要的:
select FORMAT(CONVERT(datetime,'9:31'),'HH:mm') AS 'time'
您可以将 CONVERT()
与样式 114 一起使用以获得 HH:mm
SELECT
CONVERT(nvarchar(5),
-- Get difference of time
CONVERT(datetime,'07:06 PM') - CONVERT(datetime,'09:35 AM')
, 114)
编辑
作为避免日期时间算法的注释
SELECT CONVERT(varchar(5),
DATEADD(minute,
DATEDIFF(minute, convert(time,'09:35 AM'), convert(time,'07:06 PM'))
, 0)
, 114)
DECLARE @time1 AS VARCHAR(8) = '09:35 AM'
DECLARE @time2 AS VARCHAR(8) = '07:06 PM'
SELECT
time1 = CAST(@time1 AS TIME),
time2 = CAST(@time2 AS TIME),
diff = DATEDIFF(MINUTE, @time1, @time2),
hh = RIGHT('00' + CAST(DATEDIFF(MINUTE, CAST(@time1 AS TIME), CAST(@time2 AS TIME))/60 AS VARCHAR(2)), 2),
mm = RIGHT('00' + CAST(DATEDIFF(MINUTE, CAST(@time1 AS TIME), CAST(@time2 AS TIME))%60 AS VARCHAR(2)), 2),
final = RIGHT('00' + CAST(DATEDIFF(MINUTE, CAST(@time1 AS TIME), CAST(@time2 AS TIME))/60 AS VARCHAR(2)), 2) + ':' +
RIGHT('00' + CAST(DATEDIFF(MINUTE, CAST(@time1 AS TIME), CAST(@time2 AS TIME))%60 AS VARCHAR(2)), 2)
当声明and/or转换为VARCHAR
类型时,您应该指定长度,否则SQL-服务器会为您分配一个默认值。有时是 1
,有时是 30
。有关详细信息,请参阅此 article。
另外,要将差异格式化为 hh:mm
,您需要用适当数量的零填充字符串。这是使用 :
RIGHT('00' + str, 2)
试试这个广告,看看这是否是您想要的:
SELECT FORMAT(GETDATE(),'hh:mm')
或
SELECT (CONVERT(VARCHAR(5), GETDATE(), 114))