2012-04-08 114 views
0

我试图从当前年的当前月份的第一天到当前日期获取天数。 那么,这个脚本有什么问题?和正确的?如何获取使用datediff的月份第一天的天数

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

是不是从这个月的第一天开始的天数总是等于'DAY(YourDate)'???在三月二十二日,这个数字是...... 22,不是? – 2012-04-08 09:12:52

+0

@marc_s - 我认为它可能是'-1'(因为发布的代码将在本月的第一天返回0) – 2012-04-08 09:26:46

+0

@Damien_The_Unbeliever:是的,可能 - 你是对的。 – 2012-04-08 09:33:42

回答

2

是不是从该月的第一天开始的天数总是等于DAY(YourDate)或可能是DAY(YourDate) - 1 ???

在3月22日,这个数字是..... 22(或21 - 取决于你如何计数) - 不?

那么这个怎么样:

SELECT 
    DaysFromFirstOfMonth = DAY(GETDATE()) - 1 

是你在找什么?

+0

好主意 - 你是对的,但是如何在相同的例子中使用'DateDIFF'? – Salahaldin 2012-04-08 13:06:40

+0

@Salahaldin:**为什么**你坚持'DATEDIFF'?这只是不必要的复杂和容易出错..... – 2012-04-08 15:03:06

0

你的风格值似乎是错误的。 102是用于ANSI-日期(YY.MM.DD) - 如果你想使用英国/法语日期(日/月/年),你必须使用值103:

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

http://www.w3schools.com/sql/func_convert.asp看到

+0

将varchar值“/”转换为数据类型int时转换失败。 – Salahaldin 2012-04-08 09:31:41

+0

对不起,我无法尝试这一点,所以我没有看到另一个错误:你应该可以转换为日期时间,而不是varchar。但我认为下面的一些答案正在接近这个问题好得多 – Johanness 2012-04-08 09:44:42

1

我建议您使用DAY(作为@marc_s在评论中说)或DATEPART,以返回一个整数,表示您正在使用的日期中的“月份的日期”部分。

例如为:

SELECT DAY(GETDATE()),DATEPART(day,GETDATE()) 

威尔(今天,2012 4月8日)的回报:

8,8 

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

相关问题