Sql server T-SQL日期时间减法

Sql server T-SQL日期时间减法,sql-server,Sql Server,我有一个专栏的开头和结尾。我想知道他们之间的小时数和分钟数。选择cast(结束-开始为varchar)会给出奇怪的结果,例如2009-07-24 06:16-2009-07-24 06:30会给出12:14AM的结果。。。将其转换为varchar很重要,因为稍后我将使用right()和left()从这个字符串中剪切出子字符串。如何获得正确的结果?将其转换为数字,否则它将尝试转换为日期。将其转换为数字,否则它将尝试转换为日期。您可以使用该函数 这将为您提供开始和结束之间的分钟数,然后您可以将其转换

我有一个专栏的开头和结尾。我想知道他们之间的小时数和分钟数。选择cast(结束-开始为varchar)会给出奇怪的结果,例如2009-07-24 06:16-2009-07-24 06:30会给出12:14AM的结果。。。将其转换为varchar很重要,因为稍后我将使用right()和left()从这个字符串中剪切出子字符串。如何获得正确的结果?

将其转换为数字,否则它将尝试转换为日期。

将其转换为数字,否则它将尝试转换为日期。

您可以使用该函数

这将为您提供开始和结束之间的分钟数,然后您可以将其转换为小时和分钟。

您可以使用该功能


这将为您提供开始和结束之间的分钟数,然后您可以将其转换为小时和分钟。

用于以所需单位计算两个日期之间的差值。然后将结果转换为varchar。

用于以所需单位计算两个日期之间的差值。然后将结果转换为varchar。

您可能应该做一个

您可能应该做一个

您看到的问题的原因是SQL处理它存储日期的两部分的方式

日期存储为两部分,在数值内。第一部分,整数部分存储日期,第二部分,小数部分存储时间

如果你的两个日期分别等于1.50和1.25,那么1.25-1.50=-0.25-这将被分成两部分,-0天和.25时间。一天的0.25小时将转换为6小时,因此将给出6.00上午的时间


要获得正确的日期操作,您应该始终使用DATEDIFF和DATEPART。

出现此问题的原因是SQL在存储日期时处理这两部分的方式

日期存储为两部分,在数值内。第一部分,整数部分存储日期,第二部分,小数部分存储时间

如果你的两个日期分别等于1.50和1.25,那么1.25-1.50=-0.25-这将被分成两部分,-0天和.25时间。一天的0.25小时将转换为6小时,因此将给出6.00上午的时间


要获得正确的日期操作,您应该始终使用DATEDIFF和DATEPART。

varchars不应用于日期操作。像这样使用datediff:

declare @date1 datetime, @date2 datetime
select @date1 = getdate(), @date2 = DATEADD(n, 145, @date1)
SELECT @date1, @date2

select  DATEDIFF(n, @date1, @date2) as DiffMinutes,
    DATEDIFF(n, @date1, @date2)/60 as DiffHours, 
    DATEDIFF(n, @date1, @date2)%60 as DiffMinutesOfTheHour

varchars不应用于日期操纵。像这样使用datediff:

declare @date1 datetime, @date2 datetime
select @date1 = getdate(), @date2 = DATEADD(n, 145, @date1)
SELECT @date1, @date2

select  DATEDIFF(n, @date1, @date2) as DiffMinutes,
    DATEDIFF(n, @date1, @date2)/60 as DiffHours, 
    DATEDIFF(n, @date1, @date2)%60 as DiffMinutesOfTheHour

对于相对的小时和分钟: 使用:

返回:

Hours       Minutes
----------- -----------
1           14

(1 row(s) affected)

对于相对的小时和分钟: 使用:

返回:

Hours       Minutes
----------- -----------
1           14

(1 row(s) affected)

什么应该是数字?什么应该是数字?为什么要投反对票?“2009-07-24 06:16”与“2009-07-24 07:30”是否有1小时14分钟的不同?阿格涅斯卡,有什么例子吗??我将它运行了好几种组合,在天数、小时数和/或分钟数上都有所不同,效果很好。也许你误解了它的工作原理。给我一个开始日期和结束日期,这样会产生不正确的结果。为什么要投反对票?“2009-07-24 06:16”与“2009-07-24 07:30”是否有1小时14分钟的不同?阿格涅斯卡,有什么例子吗??我将它运行了好几种组合,在天数、小时数和/或分钟数上都有所不同,效果很好。也许你误解了它的工作原理。给我一个StartDate和EndDate,这样会产生不正确的结果。查看我的最新评论…查看我的最新评论。。。