我的查询如下:
SELECT DATEDIFF(MONTH, convert(datetime,'01/01/2015',103),convert(datetime,'15/02/2015',103) )
我的结果仅为1个月。
我需要得到1.5个月的结果。 (指1个月15天)。
我如何获得输出?
答案 0 :(得分:6)
试试这个,它会计算一个月“使用”的确切百分比。它应该适用于所有日期。
DECLARE @from date = '2015-01-01'
DECLARE @to date = '2015-02-15'
SELECT
datediff(month, @from, @to) - 1 +
1-1.0*(day(@from)-1)/ day(dateadd(m, datediff(m,-1, @from), -1))
+ 1.0*(day(@to)-1)/ day(dateadd(m, datediff(m,-1, @to), -1))
结果:
1.5
请注意
from date = '2015-03-02'
to date = '2015-04-02'
将在1.001075268817中给出略高于1的结果,因为在“从”之前已过去的行军月份的百分比小于在“到”之前的四月的百分比
答案 1 :(得分:3)
请改用:
SELECT DATEDIFF(d, convert(datetime,'01/01/2015',103),
convert(datetime,'15/02/2015',103) ) / 30.0
d
代替month
来获取天数。然后除以30可得到所需的结果。
注意您必须使用30.0
而不是30
才能避免整数除法。
答案 2 :(得分:2)
这将是更正确的解决方案:
SELECT DATEDIFF(m, CONVERT(DATETIME, '01/01/2015', 103),
CONVERT(DATETIME, '15/02/2015', 103)) +
DATEPART(DAY, CONVERT(DATETIME, '15/02/2015', 103)) / 30.0
显示差异:
SELECT DATEDIFF(d, CONVERT(DATETIME, '01/01/2015', 103),
CONVERT(DATETIME, '15/03/2015', 103)) / 30.0
2.433333
和
SELECT DATEDIFF(m, CONVERT(DATETIME, '01/01/2015', 103),
CONVERT(DATETIME, '15/03/2015', 103)) +
DATEPART(DAY, CONVERT(DATETIME, '15/03/2015', 103)) / 30.0
2.500000
更准确地说,你可以不是30.0,而是上个月的天数:
SELECT DATEDIFF(m, CONVERT(DATETIME, '01/01/2015', 103),
CONVERT(DATETIME, '15/02/2015', 103)) +
(DATEPART(DAY, CONVERT(DATETIME, '15/02/2015', 103))
/ (1.0*DATEDIFF(day, CONVERT(DATETIME, '15/02/2015', 103), dateadd(month, 1, CONVERT(DATETIME, '15/02/2015', 103)))))
1.53571428571428
修改强>
如果StartDate没有从第1天开始,那么此版本将无效!然后坚持让其他用户回答。
答案 3 :(得分:0)
试试这个:
SELECT DATEDIFF(d, convert(datetime,'01/01/2015',103),
convert(datetime,'15/02/2015',103) ) / 30.0
即,您需要从DATEDIFF获取天数而不是月份,然后将其除以30以获得所需的输出。
答案 4 :(得分:0)
尝试在下面的查询中获取月份和日期:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let barViewControllers = segue.destination as? DetailsTabViewController {
//Do your data pass / setup here
}
}
答案 5 :(得分:0)
改进先前的answer。
要计算月数,可以将其分为三个部分。从月初到月底的整个月的一部分,整个月以及最后一个月的一部分。
DECLARE @STARTDATE DATETIME = CONVERT(DATETIME, '22/01/2015', 103)
DECLARE @ENDDATE DATETIME = CONVERT(DATETIME, '15/03/2015', 103)
SELECT -- Whole months
DATEDIFF(m, @STARTDATE, @ENDDATE) - 1
+
-- Part of the month at beginning of the period
(1.0*((DAY(EOMONTH(@STARTDATE))) - DATEPART(DAY, @STARTDATE) + 1)
/ DAY(EOMONTH(@STARTDATE))) -- Number of days in first month
+
-- Part of the month at the end of the period
(1.0*DATEPART(DAY, @ENDDATE)
/ DAY(EOMONTH(@ENDDATE))) -- Number of days in last month
一个月中的天数可以通过两种方式计算:
DAY(EOMONTH(@DATE)))
OR
(DATEDIFF(day, @DATE, dateadd(month, 1, @DATE)))