SQLShack (Nederlands)

SQL-datumnotatiefuncties zoals de DateDiff SQL-functie en DateAdd SQL-functie worden vaak gebruikt door DBAs, maar velen van ons hebben nooit de tijd genomen om deze buitengewoon handige functies volledig te begrijpen. Voor professionals die net met SQL Server zijn begonnen, zijn deze functies een van de eersten die ze kennen. Dus hopelijk heeft dit artikel iets voor iedereen in het hele vaardigheidsspectrum.

Een van de meest interessante gegevenstypen die worden ondersteund in de relationele databasewereld is DateTime. In dit artikel gaan we kijken naar het werken met gegevenstypen voor datum / tijd in SQL Server. We zullen de basisprincipes van het datatype datum-tijd begrijpen en we zullen ook verschillende voorbeelden zien van hoe de datum-tijdvelden kunnen worden opgevraagd met behulp van ingebouwde functies in SQL Server voor het manipuleren van de gegevens, het transformeren van datum-tijdwaarden en in enkele gevallen rekenkundige bewerkingen uitvoeren.

Laten we eerst eens kijken naar enkele populaire SQL-datumnotatie en tijdfuncties.

Standaard ondersteunt SQL Server inherent de talen die worden ondersteund door het Windows-besturingssysteem. Afhankelijk van de landinstellingen en sorteerinstellingen wanneer u SQL Server installeert, kan de weergave van de SQL-datumnotatie afwijken. Het soort gegevens dat u gaat afspelen, wordt bepaald op basis van de locale-instelling en de SQL Server-sorteerinstelling.

In SQL Server heeft het gegevenstype DATE twee standaard neutrale taalindelingen

  1. JJJJMMDD

    Het volgende voorbeeld, de HumanResource .Employee-tabel wordt opgevraagd om de SQL-datumnotatie van de HireDate-waarden te zien

    1
    2
    3
    4
    5
    6

    GEBRUIK AdventureWorks2014;
    GO
    SELECTEER HireDate, BusinessEntityID, LoginID, JobTitle
    VAN HumanResources.Employee;
    GO

    Nu, vraag de HireDate-kolom in een neutraal taalformaat. In de zoekopdracht geven we de gehele waarde door die bestaat uit het jaar 2008; maand, 12 en de 7e dag.

    1
    2
    3

    SELECTEER HireDate, BusinessEntityID, LoginID, JobTitle
    VAN HumanResources.Employee
    WAAR HireDate = “20081207”;

    Opmerking: het betekent in feite dat de invoerwaarde numeriek is; de SQL-engine converteert het intern en krijgt uiteindelijk een tekenwaarde. Het is dus omgeven door enkele aanhalingstekens.

  2. MM-DD-JJJJ (in de VS gebaseerd formaat)

    In dit SQL-datumnotatie HireDate kolom wordt gevoed met de waarden MM-DD-JJJJ. Dit is geen indeling met gehele getallen. Laten we dezelfde query uitvoeren met de nieuwe SQL-datumnotatie van invoerwaarde ‘12-07-2008 ’in de kolom HireDate. Dus laten we de volgende query uitvoeren en de uitvoer verifiëren. De output is dezelfde set van vijf records.

    1
    2
    3
    4

    SELECTEER HireDate, BusinessEntityID, LoginID, JobTitle
    VAN HumanResources.Employee
    WAAR HireDate = “12-07-2008”;
    GO

    Opmerking: de neutrale taalnotatiewaarden zijn impliciet en SQL Server zal de nodige conversie uitvoeren. Elke andere SQL-datumnotatie vereist een juiste conversie van operanden en / en waarden.

De volgende voorbeelden geven een foutmelding weer vanwege het onjuist gebruik van de SQL-datumnotatie.

1
2
3

SELECTEER HireDate, BusinessEntityID, LoginID, JobTitle
VAN HumanResources.Employee
WAAR HireDate = “25-12-2008 “;

Nu zijn de operand en zijn waarden beide geconverteerd naar een standaard formaat 103. U kunt hier verwijzen voor meer informatie over CAST en Convert functies.Het volgende voorbeeld retourneert alle rijen van de werknemer waar HireDate 25 -12-2008

Laten we nu begin eens te kijken naar enkele van de datumfuncties die SQL Server voor ons beschikbaar stelt en deze datumfuncties stellen ons in staat om met de verschillende delen van de datums te werken en zelfs een deel van de functionaliteit waarmee we kunnen werken in termen van datums te manipuleren.

Laten we eens kijken naar de DATEPART SQL-functie. Deze functie retourneert een geheel getal uit de opgegeven datumkolom

Vraag de kolom HireDate om alleen het jaargedeelte van de datum te retourneren.

Het volgende voorbeeld genereert een uitvoerkolom met een geheel getal met de naam, en dit zou alleen de jaarwaarden moeten retourneren

1
2
3

SELECTEER DATAPART (JAAR, Huurdatum) ALS
VAN HumanResources.Employee;
GO

Vraag de HireDate op kolom om alleen het maandgedeelte van de datum te retourneren

Het volgende voorbeeld genereert een uitvoerkolom met een geheel getal met de naam, en dit zou alleen de maandwaarden moeten retourneren

1
2

SELECTEER DATEPART (MAAND, HireDate) AS
VAN HumanResources.Employee;

Vraag de kolom HireDate om alleen het kwartgedeelte van de datum

Het volgende voorbeeld genereert een uitvoerkolom met een geheel getal met de naam, en dit zou alleen de maandwaarden moeten retourneren

1
2
3

SELECTEER DATEPART (QUARTER, HireDate) ALS
VAN HumanResources.Employee;
GO

Het volgende voorbeeld geeft de verkoopdetails terug voor de specifieke dag van het veld orderDate. Het voorbeeld toont ook het gebruik van de DATEPART SQL-functie en de paar bijbehorende argumenten.

De SELECT-instructie selecteert de DATEPART, wat de functienaam is, en er moeten twee argumenten tussen haakjes staan. Ten eerste het datepart-argument en de tweede, de datumexpressie.

Laten we eens kijken naar het gebruik van de DATENAME SQL-functie. Dit is vergelijkbaar met een DATEPART SQL-functie, maar het retourneert een tekenreeks uit het opgegeven datumveld.

Laten we vervolgens eens kijken naar de deterministische functies die datum- en tijdgedeelten als een geheel getal retourneren. In het volgende voorbeeld worden gehele getallen geretourneerd uit het veld OrderDate voor de corresponderende functies JAAR en MAAND.

De output is een geaggregeerde waarde van de TotalSales op basis van maandelijkse verkopen.

Laten we nu eens kijken een blik op een aantal andere verschillende functies. En deze waar we naar gaan kijken heet DATEDIFF. De DATEDIFF SQL-functie retourneert een geheel getal met teken waarde waarmee we de verstreken tijd tussen twee datums kunnen bepalen.

Laten we spelen met de query om verschillende datumdelen te gebruiken om de resultaten te zien.

Het volgende voorbeeld retourneert de tijdsdelen tussen de twee DateTime-velden. In dit voorbeeld worden uren, minuten en seconden tussen de DateTime-waarden berekend met de DATEDIFF SQL-functie

Hoe om de DATEDIFF SQL-functie te gebruiken in de where-clausule

In het volgende voorbeeld worden alle medewerkers geretourneerd die meer dan 10 jaar bij de organisatie werken. De voorwaardelijke logica in de HireDate-kolom wordt vergeleken met meer dan 120 maanden en wordt vermeld in de where-clausule.

1
2
3
4

SELECTEER *
VAN HumanResources.Employee
WHERE DATEDIFF (MONTH, HireDate, GETDATE ()) > 120;
GO

Hoe de DateDiff SQL-functie te gebruiken met een Aggregate-functie

Het volgende voorbeeld retourneert het aantal jaren tussen de eerste huurdatum en de laatste huurdatum. In dit geval zijn we op zoek naar de minimale HireDate en de maximale HireDate-verzamelfunctie die worden gebruikt als invoerparameters voor de DATEDIFF SQL-functie.Met deze waarden kan men gemakkelijk het aantal jaren vinden tussen de eerste keer in dienst nemen en de laatste keer aannemen.

1
2

SELECTEER DATEDIFF (YEAR, MIN (HireDate), MAX (HireDate)) No_Of_Years
VAN HumanResources.Employee;

Laten we eens kijken naar de DATEADD SQL-functie. De functies voegen de waarde toe aan of trekken deze af bij het gespecificeerde datepart en retourneren de gewijzigde waarde van het datepart.

Laten we het volgende voorbeeld eens bekijken. De waarde 1 wordt toegevoegd aan het verschillende datepart en de waarde -1 wordt toegevoegd aan het uur datepart en -30 wordt toegevoegd aan het minuut datepart.

In de output kunnen we zien dat de waarde wordt gebruikt op het GETDATE () functie volgens het gedefinieerde datepart.

Opmerking: DATEADD en DATEDIFF SQL-functie kunnen worden gebruikt in de SELECT, WHERE, HAVING, GROUP BY en ORDER BY-clausules.

Datadiff vs Datediff_BIG

Dat is alles voor nu in dit artikel over SQL-datumnotatie …

Wrap Up

Tot nu toe hebben we zeer belangrijke SQL-datumnotatie-functies gezien, zoals DATEPART, DATENAME, YEAR, MONTH en DAY, met bijzondere nadruk op de DATEADD SQL-functie en de DATEDIFF SQL-functie. SQL-datumnotatiefuncties in SQL Server zijn echt krachtig en helpen echt om indrukwekkende gegevensanalyses en rapporten te leveren. In sommige gevallen is het een kwestie van het aanpassen van de sorteerinstellingen, locatie-instellingen, het eenvoudig opnieuw aanpassen van de invoerstroom van tekstwaarde of het corrigeren van de gegevensbron die voldoende is voor het datum-tijdprobleem.

Het wordt aanbevolen om het neutrale taalformaat te gebruiken, omdat dit in de meeste gevallen beter werkt. Eindelijk zien we het verschil tussen DATEDIFF SQL-functie en DATEDIFF_BIG SQL-functie. Ik hoop dat je dit artikel leuk vindt. Als u vragen heeft, kunt u hieronder gerust reageren.

  • Auteur
  • Recente berichten
Ik ben een databasetechnoloog met 11+ jaar rijke, praktische ervaring met databasetechnologieën. Ik ben Microsoft Certified Professional en gesteund met een graad in Master of Computer Application.
Mijn specialiteit ligt in het ontwerpen van & het implementeren van oplossingen voor hoge beschikbaarheid en platformonafhankelijke DB-migratie. De technologieën waar momenteel aan wordt gewerkt zijn SQL Server, PowerShell, Oracle en MongoDB.
Bekijk alle berichten van Prashanth Jayaram

Laatste berichten door Prashanth Jayaram (bekijk alle)
  • Een kort overzicht van database-audit in SQL – 28 januari 2021
  • Azure Data Sync instellen tussen Azure SQL-databases en on-premises SQL Server – 20 januari 2021
  • Azure SQL-database import- / exportbewerkingen uitvoeren met PowerShell – 14 januari , 2021

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *