我有一个包含诊所信息的数据库。
每个诊所都有一个开放日期(比如,2014-05-23 00:00:00)和一个名为MIO(monthsInOperation)的字段,基本上是诊所运营的月数。
对于每个诊所,我需要基于当前操作月份(MIO)的格式(例如,7月13日)的日历月和年份,在数据库中可以是0,1,2,....等等。
我知道我需要使用DATEADD()
或DATEPART()
或DATEDIFF()
功能。但我无法得到理想的结果。
上一次诊所的答案应该是2012年2月
答案 0 :(得分:4)
如果我误解了你的问题,请纠正我,但有没有理由你不能做这样的事情?
SELECT DATEADD(MONTH, MonthsInOperation, OpenDate) FROM Clinics
这不会给你一个月和一年,但是无论如何SQL中都没有这样的类型。您可以在客户的代码上处理生成的DATE
或DATETIME
,并ToString
使其符合您希望的格式(MM-yyyy
或您拥有的内容)。也可以使用MONTH(DATE)
和YEAR(DATE)
函数将它们分开,尽管我个人也不会打扰。看起来更像是一个UI问题,你只想看到月份和年份。
SELECT MONTH(DATEADD(MONTH, MonthsInOperation, OpenDate)), YEAR(DATEADD(MONTH, MonthsInOperation, OpenDate))
听起来这会输出您需要使用的两列:月份和年份。
然而,
SELECT DATENAME(MONTH, DATEADD(month, MonthsInOperation, OpenDate)) + "-" + YEAR(DATEADD(MONTH, MonthsInOperation, OpenDate)))
如果我理解你的话,应该准确地给出你想要的东西。
答案 1 :(得分:0)
如果您需要每个诊所开放的月份列表,您可以这样做。你需要的第一件事是一个数字列表,其余的很简单。
with n as (
select 0 as n
union all
select n + 1
from n
where n < 50
)
select c.*, year(dateadd(month, n.n, c.opening_date)),
month(dateadd(month, n.n, c.opening_date))
from clinics c join
n
on n.n <= c.mio;
我选择将年份和月份格式化为两个单独的数字列。您可以使用datename()
或convert()
来获取特定格式。
编辑:
如果您只想要最近一个月,那就更简单了:
select c.*, year(dateadd(month, c.mio, c.opening_date)),
month(dateadd(month, c.mio, c.opening_date))
from clinics c;