Een SQL Server-database kan een verscheidenheid aan gegevenstypen opslaan, zoals getallen, tekenreeksen, Booleaanse waarden, datums, enz. Het opslaan en verwerken van dergelijke gegevens heeft echter zijn specifieke kenmerken. Het huidige artikel richt zich op het opslaan van datums in een SQL Server-databasetabel en het converteren van verschillende soorten datums naar het SQL Server-formaat JJJJ-MM-DD en vice versa.
Laten we beginnen!
JJJJ-MM-DD – de datumnotatie in SQL Server
Het gegevensformaat JJJJ-MM-DD van SQL Server suggereert dat het jaar wordt gemarkeerd door vier cijfers, bijvoorbeeld 2021. De maand wordt vervolgens gespecificeerd in 2 cijfers variërend van 1-12 – bijvoorbeeld juni zou 06 zijn. Ten slotte, de dag van de maand wordt weergegeven in 2 cijfers, zoals 20. Dus de datum 06 juni 2021 , wordt opgeslagen als 2021-06-21. Het is de indeling JJJJ-MM-DD voor datums in SQL Server-databases.
In SQL Server kunt u het gegevenstype Datum of DateTime gebruiken om datums op te slaan. Het verschil tussen de datatypes Date en DateTime ligt in het detailniveau waarin beide datatypes de datuminformatie opslaan.
- De DateTime gegevenstype slaat de datum op samen met de tijd informatie over uur , minuten , en seconden .
- De Datum gegevenstype stelt u alleen in staat om de datum . op te slaan informatie zonder de tijdinformatie.
Het volgende voorbeeld laat het verschil zien tussen de datatypes Datum en DateTime.
Eerst maken we een dummy MijnDatabase database en één tabel (Patiënt ) erin.
De Patiënt tabel heeft 5 kolommen:Id, Naam, Geslacht, DOB (geboortedatum) en DOD (datum van overlijden). Het type DOB-kolom is Datum, terwijl de DOD-kolom het datatype DateTime heeft.
CREATE DATABASE MyDatabase
USE MyDatabase
CREATE TABLE Patient
(
Id INT PRIMARY KEY IDENTITY(1,1),
Name VARCHAR (50) NOT NULL,
Gender VARCHAR (50),
DOB Date,
DOD DateTime
)
Het volgende script voegt enkele dummy-records in de Patiënt . in tafel:
INSERT INTO Patient
VALUES ('Jack', 'Male', '1960-12-15', '2017-06-30 16:30:35'),
('Sara', 'Female', '1962-01-20', '2015-02-22 10:35:55'),
('Elisa', 'Female', '1959-03-25', '2020-03-16 22:24:39'),
('Nik', 'Male', '1938-12-15', '2011-06-21 09:45:55'),
('Jos', 'Male', '1940-09-12', '2015-03-25 11:55:20')
Let op het verschil tussen de waarden die in de DOB-kolom en de DOD-kolom zijn ingevoegd. De DOB-kolom heeft waarden in de indeling JJJJ-MM-DD, maar voor de DOD-kolom geeft u de informatie HH:MM:SS (uren:minuten:seconden) door.
Laten we nu eens kijken hoe onze Patiënt tafel eruit ziet. Voer het volgende SQL-script uit om alle records uit de patiënttabel te selecteren:
SELECT * FROM Patient
Datum/tijd converteren naar datumnotatie JJJJ-MM-DD in SQL Server
Vaak hebben we alleen het datumgedeelte nodig van de DateTime kolom. Aangezien de datumwaarden standaard worden opgeslagen in SQL Server in de indeling JJJJ-MM-DD, het uitpakken van het datumgedeelte uit het gegevenstype DateTime geeft de datum als resultaat in deze indeling .
Laten we een voorbeeld bekijken. De DOD kolom in de Patiënt tabel slaat waarden op in de DateTime formaat. Laten we eens kijken hoe we de Datum . kunnen extraheren deel uit de kolom:
SELECT CAST(DOD AS DATE) AS DOD_Date
FROM Patient
Zoals je kunt zien in het bovenstaande script, om de kolom DateTime-type te converteren naar Datum , kunt u de CAST . gebruiken functie. U moet de kolomnaam doorgeven gevolgd door de AS verklaring en de DATUM typ naar de CAST functie.
Hier is het resultaat van je script:waarden uit de DOD-kolom worden geselecteerd en geconverteerd naar de indeling JJJJ-MM-DD.
Laten we zowel de originele DOD kolomwaarden en omgezet DOD waarden om het verschil tussen hen aan te tonen:
SELECT DOD as DOD, CAST(DOD AS DATE) AS DOD_Date
FROM Patient
Als u ten slotte alle kolommen in uw tabel wilt selecteren en slechts één kolom wilt casten (bijvoorbeeld de DOD-kolom converteren naar het type Datum), kunt u het volgende script uitvoeren:
SELECT t.*, CAST(DOD AS DATE) AS DOD_Date
from Patient t
In de uitvoer ziet u alle tabelkolommen samen met de DOD_Date-kolom die het gedeelte Datum uit de DOD-kolom bevat.
Hoe tekenreeks naar SQL Server-datumnotatie JJJJ-MM-DD te converteren
Datums worden vaak opgeslagen in tekenreeksindelingen in de kolommen van de SQL Server-tabel. U kunt de tekenreekswaarden converteren naar het SQL Server-datumformaat JJJJ-MM-DD.
Laten we een nieuwe kolom maken in onze Patiënt tafel. De naam van de kolom is Arriv_Date (dummykolom die de aankomstdatums van patiënten toont), en het kolomtype is VARCHAR . Voer het volgende script uit om deze kolom te maken:
ALTER TABLE Patient
ADD Arriv_Date varchar(50);
U ontvangt de nieuwe Arriv_Date kolom toegevoegd aan de Patiënt kolom. Op dit moment is de Aankomstdatum kolom bevat NULL waarden.
SELECT * FROM Patient
Laten we nu enkele records toevoegen aan de Aankomstdatum kolom. Het volgende script voegt strings in verschillende datumnotaties in deze kolom in.
UPDATE Patient SET Arriv_Date = '10-Nov-2012' WHERE Id = 6
UPDATE Patient SET Arriv_Date = 'March 31, 2015' WHERE ID = 7
UPDATE Patient SET Arriv_Date = '12/02/2020' WHERE ID = 8
UPDATE Patient SET Arriv_Date = '10 October 2020' WHERE ID = 9
UPDATE Patient SET Arriv_Date = '15/10/21' WHERE ID = 10
Laten we nu eens kijken hoe de gegevens in de Aankomstdatum kolom kijkt. Voer het onderstaande script uit:
SELECT * FROM Patient
Om alle tekenreeksen in de Arriv_Date . te converteren kolom naar de SQL Server-datumnotatie JJJJ-MM-DD , kunt u de CAST . opnieuw gebruiken functie. U moet de kolomnaam opgeven gevolgd door de AS verklaring en de DATUM typ.
Het volgende script selecteert de originele Aankomstdatum kolom en de waarden erin die worden geconverteerd naar datumnotatie.
Select Arriv_Date, CAST(Arriv_Date as DATE) as ARRIVAL_DATE
FROM Patient
De uitvoer toont waarden in verschillende datumformaten. De kolom van het tekenreekstype Aankomstdatum wordt geconverteerd naar de JJJJ-MM-DD formaat in de ARRIVAL_DATE kolom:
SQL Server-datumnotatie YYYY-MM-DD converteren naar andere formaten
Net zoals u andere formaten naar JJJJ-MM-DD kunt converteren, kunt u het omgekeerde doen. De JJJJ-MM-DD . converteren datumnotatie naar strings met verschillende datumnotaties, kunt u de CONVERT-functie gebruiken.
De CONVERT-functie accepteert drie parameters:het doeltype dat VARCHAR(50) is in het volgende script, de originele datumkolom en de code. De code definieert hoe de geconverteerde datum eruit zal zien. Hier converteert de codewaarde van 105 de datum naar het DD-MM-YYYY-formaat.
Voer het script uit om de datum te converteren van de indeling JJJJ-MM-DD naar DD-MM-JJJJ:
SELECT DOB, CONVERT(varchar(50), DOB ,105) as DOB_CONV
From Patient
Hier is de uitvoer:
Laten we nog een voorbeeld nemen. De codewaarde van 106 voor de geconverteerde datum converteert de datum van de indeling JJJJ-MM-DD naar de indeling DD MON JJJJ. In de eerste kolom wordt bijvoorbeeld de datum 1960/12/15 omgezet naar 12 Dec 1960.
SELECT DOB, CONVERT(varchar(50), DOB ,106) as DOB_CONV
From Patient
Op dezelfde manier converteert de codewaarde van 6 een datum naar het DD MON YY-formaat:
SELECT DOB, CONVERT(varchar(50), DOB ,6) as DOB_CONV
From Patient
En tot slot converteert de codewaarde van 11 een datum naar de indeling JJJJ/MM/DD:
SELECT DOB, CONVERT(varchar(50), DOB ,111) as DOB_CONV
From Patient
Raadpleeg de officiële SQL Server-documentatie voor meer informatie over alle verschillende datumformaten en bijbehorende codes.
Conclusie
Op deze manier hebben we zowel de essentie van het SQL-server-datumformaat JJJJ-MM-DD als de specifieke gevallen van het converteren van de datums naar dit formaat en vice versa verduidelijkt.
We hebben geleerd om de CAST-functie te gebruiken om verschillende gegevenstypen, waaronder DateTime en strings, om te zetten naar de indeling JJJJ-MM-DD en de CONVERT-functie om de JJJJ-MM-DD-datums om te zetten in andere indelingen.
Bovendien maken de moderne tools voor SQL Server-specialisten het bewerken van de datums veel eenvoudiger. De veelzijdige dbForge Studio voor SQL Server bevat bijvoorbeeld, naast de overige opties, een handige Visual Data Editor die u kunt gebruiken wanneer u met datums in SQL Server werkt.
Ik hoop dat deze informatie nuttig voor u was. Blijf kijken!