Probleem:
U wilt een datumwaarde in een ander formaat weergeven in SQL Server.
Voorbeeld:
Onze database heeft een tabel met de naam company
met gegevens in de kolommen id (primaire sleutel), naam , en startdatum .
id | naam | startdatum |
---|---|---|
1 | Lisa Bank | 2019-01-20 |
2 | Credit Financial Institute | 2018-03-14 |
3 | Williams Holding | 28-10-2019 |
Laten we voor elk bedrijf de startdatum converteren naar een nieuwe indeling, 'JJJJ/MM/DD', waarbij JJJJ een jaar van vier cijfers is, MM een maand van twee cijfers en DD een dag van twee cijfers.
Oplossing 1:
We gebruiken de CONVERT()
functie. Dit is de vraag die je zou schrijven:
SELECT CONVERT(NVARCHAR, start_date, 111 ) AS new_date FROM company;
Hier is het resultaat:
naam | startdatum |
---|---|
Lisa Bank | 2019/01/20 |
Credit Financial Institute | 2018/03/14 |
Williams Holding | 2019/10/28 |
Discussie:
Gebruik de CONVERT()
functie om het formaat van een datum uit een bepaalde kolom of uitdrukking te wijzigen.
Deze functie heeft drie argumenten:
- Het nieuwe gegevenstype (in ons voorbeeld NVARCHAR).
- Een uitdrukking of kolomnaam die de op te maken datum bevat (in ons voorbeeld de
start_date
kolom). - Een optionele stijlcode, als geheel getal. (In ons voorbeeld geeft de stijl '111' de datum weer met schuine strepen om de delen te scheiden.)
De onderstaande tabel toont de meest populaire datumstijlcodes:
code | beschrijving |
---|---|
101 | 30-11-2019 |
102 | 2019.11.30 |
103 | 30/11/2019 |
104 | 30.11.2019 |
105 | 30-11-2019 |
110 | 30-11-2019 |
111 | 2019/11/30 |
Een uitgebreide lijst met opmaakstijlen is te vinden in de T-SQL-documentatie.
De bovenstaande query veranderde het formaat van Lisa Bank's datum 2019-01-20 in een string met de datum '2019/01/20'.
Oplossing 2:
In SQL Server 2012 en later kunt u de FORMAT()
functie om datum-/tijdnotaties te wijzigen. U gebruikt onderstaande karakters om het gewenste formaat te specificeren:
patroon | beschrijving |
---|---|
dd | dag in bereik 01-31 |
MM | maand in bereik 01-12 |
jj | 2-cijferig jaar |
jjjj | 4-cijferig jaar |
HH | uur in bereik 00-23 |
mm | minuten in bereik 00-59 |
ss | seconden in bereik 00-59 |
Dit is de vraag die u zou schrijven met FORMAT():
SELECT FORMAT(start_date, ‘yyyy-MM-dd’ ) AS new_date FROM company;
Het eerste argument is de datetime/date/time-waarde die opnieuw moet worden geformatteerd. De tweede is een string die het patroon van het nieuwe formaat bevat. Deze functie retourneert een NVARCHAR-gegevenstype. Gebruik FORMAT()
als u met SQL Server 2012 of later werkt en datums/tijden wilt converteren naar tekenreeksen die de opgemaakte datums/tijden bevatten.