Vore tacksam om någon snabbt (jag vet att det är enkelt, men jag kommer inte loss) kan hjälpa mig med att i T-SQL ta fram ett datum som är: SELECT DATEADD( d, -1, ( CAST(YEAR(GETDATE())-2 AS VARCHAR(4)) + '-' + CAST(MONTH(GETDATE())AS VARCHAR(2)) + '-01' ) ) Varsågod! Snyggt, Marcus! Sorry Pelle, men den funkar inte om dagen "D" är den 29 februari. Prova får du se... Men... din day()-funktion är snyggare. Sen anmärker jag (T-SQL polisen) på att man inte skall subtrahera datum, utan i så fall nästla en DATEADD() till... Aaah, skottdagen tänkte jag inte på... Visserligen just nu, men inte i .NET (och som alla inte vet så är SQL 2005 .NET integrerad...)Få fram datum
- sista dagen i månaden innan, två år tillbaka i tiden.
- Om dagens datum är 2004-12-14, vill jag få fram 2002-11-30
- Om dagens datum är 2005-01-28, vill jag få fram 2002-12-31
Tackar
PeterSv: Få fram datum
/mickeSv: Få fram datum
<code>
select dateadd(yy,-2,getdate())-datepart(d,dateadd(yy,-2,getdate()))
</code>
Eller om du vill ha den som en UDF:
<code>
create function dbo.GetLastDayPrevMonthTwoYearsago(@d datetime) returns datetime
as
begin
return dateadd(yy,-2,@d)-datepart(d,dateadd(yy,-2,@d))
end
</code>
<code>
select dbo.GetLastDayPrevMonthTwoYearsago(valfritt datum)
</code>
MVH
Marcus Olsson
MCT, MCDBA, MCSD, MCSE+ISv:Få fram datum
Tillåter mig dock att förkorta lite:
<CODE>
select dateadd(yy,-2,getdate()) - day(getdate())
</CODE>
/PelleSv: Få fram datum
/MarcusSv:Få fram datum
/mickeSv: Få fram datum
Ni har rätt båda två - men finns det egentligen något skäl att inte hantera datum direkt med - och +, förutom det rent stilistiska? Jag tycker rent av att det borde gå snabbare att inte använda dateadd eftersom datum internt representeras som två heltal (ett för datum och ett för tid).
/PelleSv:Få fram datum
och dessutom om man testar lite, så är datumvärdet 1 (siffran ett konverterad till datum)
2 januari 1900, 1 januari 1900 eller 2 januari 1904 - allt beroende på inställningar.
man bör alltså inte alls förlita sig på att datum/tid är tal.
/micke