sql >> Database >  >> RDS >> Database

Een datum opmaken in T-SQL

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:

  1. Het nieuwe gegevenstype (in ons voorbeeld NVARCHAR).
  2. Een uitdrukking of kolomnaam die de op te maken datum bevat (in ons voorbeeld de start_date kolom).
  3. 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.


  1. Hoe een opgeslagen procedure in MySQL te maken

  2. Oracle MINUS-operator uitgelegd

  3. Rijen en kolommen transponeren zonder aggregatie

  4. Toegang geweigerd voor gebruiker 'root'@'localhost' (met wachtwoord:JA) - Geen rechten?