Binnen mijn werk waar ik regelmatig moet samenwerken met Oracle specialisten krijg ik vaak opmerkingen over de datum functies van MS T_SQL.
"Ze zijn niet handig, lastig in gebruik, waarom kan ik niet gewoon net als in oracle gebruikmaken van bv: to_date('01-JAN-2002'),'YYYYMMDD') maar moet ik getal codes gebruiken?"
CONVERT(VARCHAR(8),GETDATE(),112) = yyyymmdd (ISO) of CONVERT(VARCHAR(10),GETDATE(),103) = dd/mm/yyyy (ISO)
Naar mijn mening het is niet moeilijker maar anders en je moet er aan wennen.
Kan je echter niet wennen aan de CONVERT functie van MS T-SQL dan zijn er nog voldoende andere mogelijkheden die voldoende flexibiliteit bieden.
Voor een overzicht kijk je een keer op:
http://msdn.microsoft.com/en-us/library/ms186724.aspxDATEPART is de meest flexibele functie die je kan gebruiken om ieder formaat aan je datum te geven. Ok, het is niet zo eenvoudig als to_date, maar dat is voor 99% wennen.
SELECT
CAST(DATEPART(yyyy,GETDATE()) AS VARCHAR(4)) AS 'Jaar'
, CAST(DATEPART(mm,GETDATE()) AS VARCHAR(2)) AS 'Maand'
, CAST(DATEPART(dd,GETDATE()) AS VARCHAR(2)) AS 'Dag'
, CAST(DATEPART(yyyy,GETDATE()) AS VARCHAR(4)) +
RIGHT('0'+CAST(DATEPART(mm,GETDATE()) AS VARCHAR(2)),2) +
RIGHT('0'+CAST(DATEPART(dd,GETDATE()) AS VARCHAR(2)),2) AS 'yyyymmdd'
Resulteerd in:
Jaar Maand Dag yyyymmdd
---- ----- ---- --------
2009 9 16 20090916
Wil je alleen jaar,maand,dag wilt gebruiken kan dit natuurlijk ook met 3 specifieke functies:
SELECT
DAY(GETDATE()) AS 'Dag'
, MONTH(GETDATE()) AS 'Maand'
, YEAR(GETDATE()) AS 'Jaar'
"Moet ik dan iedere keer een lange query typen om iets eenvoudigs te realiseren". Kijk dan eens naar de mogelijkheden van SQL Server Management Studio Template Explorer.