【问题标题】:Calculating DATEDIFF(Month) in SQL Server在 SQL Server 中计算 DATEDIFF(月)
【发布时间】:2015-02-10 23:17:49
【问题描述】:

我正在使用DateDiff 函数来查找两个日期之间的月数。但我面临的问题是,如果差值是 1 个月和 3 天,它不是 2 个月。

SELECT * 
FROM tablename 
WHERE 
    DATEDIFF(month, CONVERT(DATE, CONVERT(DATE, '20/10/2013', 103), 120),
                    CONVERT(DATE, CONVERT(DATE, '25/11/2013', 103), 120)) > 2   

结果应该是 2,但它给出了 1

表中的日期列是varchar,类型值存储为dd/mm/yyyy。即使是一个月中的一天也应该计算为1个月

【问题讨论】:

  • 为什么哦为什么哦为什么? “表中的日期列是varchar类型值存储为dd/mm/yyyy。”期望如何排序?
  • 没有其他方法可以完成这项工作吗?
  • 即使在日期时间字段上它也给出相同的结果
  • 您的假设是错误的 - DATEDIFF 会查看您告诉它的项目 - 如果您告诉它查看 MONTH,它将仅 查看月份 - 2013 年 10 月和 2013 年 11 月相差 1 个月 - 所以答案正确

标签: sql-server sql-server-2008 datediff


【解决方案1】:

得到答案

ALTER FUNCTION [dbo].[CalculateNumberOfMonths]
(
    @date1 varchar(50),
    @date2 varchar(50)
)

RETURNS varchar(10)

AS

BEGIN

declare @days int
declare @months int
select @days = datediff(day,CONVERT(DATE,@date1,103),CONVERT(DATE,@date2,103)) 
select @months = datediff(month,CONVERT(DATE,@date1,103),CONVERT(DATE,@date2,103)) 

if(@days % 7 >0)
begin
set @months= @months + 1
end

RETURN @months

END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多