2017-04-05 33 views
1

Mabuhay!如何在sql查询中添加年份和月末

是否有任何更新日期的短代码以及额外的2年和月末?

样品: 账户开业时间:2017年4月4日
有效期:2019年4月30日

UPDATE dbname SET [Expiry] = DateAdd(year,2,[AccountOpened]) 

没有加入这个UPDATE dbname SET [Expiry] = DateAdd(mm,1,[AccountOpened]) ,因为它会增加上个月日起1个月来代替。

谢谢

+0

如果你正在谈论SQL Server,它现在有一个[EOMONTH](https://docs.microsoft.com/en-us/sql/t-sql/functions/eomonth-transact-sql)函数。在你的情况下,你可以使用它的第二个参数24:'EOMONTH(AccountOpened,24)' – cha

+0

请标记您的DBMS。它是MySQL吗? PostgreSQL的? SQL Server? ...您应该始终用SQL问题标记您的DBMS以获得更好的答案。 –

+0

感谢提醒,是的,它为sql服务器抱歉混淆。注意到这一点。 – astroboy

回答

1

如果你正在使用SQLSERVER脚本会给出欲望的结果。在执行UPDATE操作之前,取回原始数据。

UPDATE dbname 
SET [Expiry] = DATEADD(d,-1,DATEADD(m,DATEDIFF(m,0, (DATEADD(YY,2,AccountOpened))) + 1,0)) 
1

这应该用于SQL Server工作(任何版本,我认为)

UPDATE dbName 
SET [Expiry] = DATEADD(MONTH, ((YEAR([AccountOpened]) - 1898) * 12) + MONTH([AccountOpened]), -1) 

I made a fiddle

对于SQL Server 2012+,你可以简单地说:

UPDATE dbName SET [Expiry] = EOMONTH([AccountOpened], 24) 

对于MySQL (我猜你没有使用,因为你的领域使用括号,但这里仍然是):

UPDATE dbName SET Expiry = LAST_DAY(DATE_ADD(AccountOpened, INTERVAL 2 YEAR))  
0

您是否正在寻找该查询?

where子句= CAST之间CAST([CustomDate2] AS DATE)(GETDATE()AS DATE)和DATEADD(日,+/-号这里,CAST(GETDATE()AS DATE))

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,"your date")+1,0)) 

LastDay_AnyMonth 的ResultSet: LastDay_AnyMonth --------

2007-08-31 23:59:59.000