Sql server 如何使用datediff获取每月第一天起的天数

Sql server 如何使用datediff获取每月第一天起的天数,sql-server,Sql Server,我正在尝试获取从当年当月1日到当前日期的天数。 那么,这个脚本有什么问题?对的那个呢 select DATEDIFF(day,CONVERT(varchar,1+'/'+ MONTH(GETDATE())+'/' + YEAR(GETDATE()),102),GETDATE()); 你的风格价值似乎是错误的。102表示ansi日期(yy.mm.dd)-如果要使用英国/法国日期(dd/mm/yy),必须使用103值: select DATEDIFF(day,CONVERT(varchar,1

我正在尝试获取从当年当月1日到当前日期的天数。 那么,这个脚本有什么问题?对的那个呢

select DATEDIFF(day,CONVERT(varchar,1+'/'+ MONTH(GETDATE())+'/' + YEAR(GETDATE()),102),GETDATE());  

你的风格价值似乎是错误的。102表示ansi日期(yy.mm.dd)-如果要使用英国/法国日期(dd/mm/yy),必须使用103值:

select DATEDIFF(day,CONVERT(varchar,1+'/'+ MONTH(GETDATE())+'/' + YEAR(GETDATE()),103),GETDATE());  

请参见

您的样式值似乎是错误的。102表示ansi日期(yy.mm.dd)-如果要使用英国/法国日期(dd/mm/yy),必须使用103值:

select DATEDIFF(day,CONVERT(varchar,1+'/'+ MONTH(GETDATE())+'/' + YEAR(GETDATE()),103),GETDATE());  

参见从一个月的第一天算起的天数不是总是等于
天(YourDate)
或者可能等于
天(YourDate)-1吗

3月22日,这个数字是。。。。。22(或21-取决于你如何计算)-否

那么这个呢:

SELECT
    DaysFromFirstOfMonth = DAY(GETDATE()) - 1

这就是你想要的吗?

从一个月的第一天开始的天数不是总是等于
天(你的日期)
或者可能是
天(你的日期)-1吗

3月22日,这个数字是。。。。。22(或21-取决于你如何计算)-否

那么这个呢:

SELECT
    DaysFromFirstOfMonth = DAY(GETDATE()) - 1

这就是你想要的吗???

我建议你要么使用(正如@marc_s在评论中所说的),要么返回一个整数,表示你正在处理的日期的“月中的某一天”部分

例如:

将(今天,2012年4月8日)返回:


然后,您可以从那里执行任何必要的调整。

我建议您使用(正如@marc_s在评论中所说的)或返回一个整数,该整数表示您正在处理的日期的“月中某一天”部分

例如:

将(今天,2012年4月8日)返回:


然后,您可以从那里执行任何必要的调整。

从月1日开始的天数不总是等于
天(您的日期)
???3月22日,这个数字是。。。。。22,不是吗?@marc_s-我想这可能是
-1
(因为发布的代码将在月初返回0)@Damien_异教徒:是的,可能是-你是对的。真正的错误是你使用字符串运算来计算日期。从月初开始的天数不总是等于
天(YourDate)吗
???3月22日,这个数字是。。。。。22,不是吗?@marc_s-我想这可能是
-1
(因为发布的代码将在本月1日返回0)@Damien_异教徒:是的,可能-你是对的。真正的错误是使用字符串操作进行日期计算。将varchar值“/”转换为数据类型int时,转换失败。很抱歉,我无法尝试此操作,因此我没有看到其他错误:您可能应该转换为datetime,而不是varchar。但是我认为下面的一些答案可以更好地解决这个问题。当将varchar值“/”转换为数据类型int时,conversion失败了。很抱歉,我无法尝试,所以我没有看到其他错误:您可能应该转换为datetime,而不是varchar。但是我认为下面的一些答案更接近这个问题。好主意,你是对的,但是如何在同一个例子中使用“DateDIFF”?@Salahaldin:你为什么坚持使用
DateDIFF
??这是不必要的复杂和容易出错……好主意你是对的,但是如何在同一个例子中使用“DateDIFF”?@Salahaldin:你为什么坚持使用
DateDIFF
??这是不必要的复杂和容易出错。。。。。