dinsdag 15 september 2009

Datum formaat in Microsoft T-SQL

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.aspx

DATEPART 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.




Geen opmerkingen: