Date funktioner i sql. SQL - Datumfunktioner


SQL -lektion 13. Datum- och tidsfunktioner

Dessa funktioner är utformade för att fungera med kalenderdatatyper. Låt oss överväga de mest tillämpliga.
  • CURDATE (), CURTIME () och NOW () Den första funktionen returnerar aktuellt datum, den andra returnerar aktuell tid och den tredje returnerar aktuellt datum och tid. Jämföra:

    VÄLJ KURDAT (), CURTIME (), NU ();


    Funktionerna CURDATE () och NOW () är användbara för att lägga till poster i databasen med aktuell tid. I vår butik använder alla sändningar och försäljning den aktuella tiden. Därför är det bekvämt att använda funktionen CURDATE () för att lägga till poster om leveranser och försäljning. Anta till exempel att en produkt har kommit till vår butik, låt oss lägga till information om detta till leveransbordet (inkommande):

    INSERT INTO incoming (id_vendor, date_incoming) VÄRDEN ("2", curdate ());


    Om vi ​​skulle lagra leveransdatumet med datatypen, skulle funktionen NU () vara mer lämplig för oss.

  • ADDDATE (datum, INTERVAL -värde) Funktionen returnerar datumdatum till vilket värde läggs till. Värdet kan vara negativt, då kommer sista datumet att minska. Låt oss se när våra leverantörer levererade varorna:

    VÄLJ id_vendor, datum_inkommande FRÅN inkommande;


    Anta att vi gjorde ett misstag när vi skrev in datumet för den första leverantören, låt oss minska datumet med en dag:
    Värdet kan inte bara vara dagar, utan också veckor (VECKA), månader (MÅNAD), kvartal (KVARTAL) och år (ÅR). Låt oss till exempel minska leveransdatumet för den andra leverantören med 1 vecka:
    I tabellen Leveranser (inkommande) använde vi datumtypen för kolumnen Leveransdatum (datum_inkommande). Som du kommer ihåg från lektion 2 är denna datatyp utformad för att bara lagra datum. Men om vi använde datatypen, skulle vi inte bara visa datum, utan också tid. Då kunde vi använda funktionen ADDDATE för tid också. I detta fall kan värdet på värdet vara sekunder (SECOND), minuter (MINUTE), timmar (HOUR) och deras kombinationer:
    minuter och sekunder (MINUTE_SECOND),
    timmar, minuter och sekunder (HOUR_SECOND),
    timmar och minuter (HOUR_MINUTE),
    dagar, timmar, minuter och sekunder (DAY_SECOND),
    dagar, timmar och minuter (DAY_MINUTE),
    dagar och timmar (DAY_HOUR),
    år och månader (YEAR_MONTH).
    Låt oss till exempel lägga till 2 timmar 45 minuter till datumet 15 april 2011:

    VÄLJ ADDDATE ("2011-04-15 00:02:00", INTERVAL "02:45" HOUR_MINUTE);



  • SUBDATE (datum, INTERVAL -värde) -funktionen är identisk med den föregående, men den utför subtraktion, inte addition.

    VÄLJ SUBDATUM ("2011-04-15 00:02:00", INTERVAL "23:53" HOUR_MINUTE);



  • PERIOD_ADD (period, n) Funktionen lägger till n månader till datumvärdesperioden. En nyans: datumvärdet måste vara i formatet ÅÅÅÅMM. Låt oss lägga till 2 månader till februari 2011 (201102):

    VÄLJ PERIOD_ADD (201102, 2);



  • TIMESTAMPADD (intervall, n, datum) funktionen lägger till ett tidsintervall n till datumet, vars värden ställs in med intervallparametern. Möjliga värden för intervallparametern:

    FRAC_SECOND - mikrosekunder
    SECOND - sekunder
    MINUT - minuter
    TIMMAR - timmar
    DAG - dagar
    VECKA - veckor
    MÅNAD - månader
    KVARTAL - kvartal
    ÅR - år

    VÄLJ TIMESTAMPADD (DAG, 2, "2011-04-02");



  • TIMEDIFF (datum1, datum2) beräknar skillnaden i timmar, minuter och sekunder mellan två datum.

    VÄLJ TIMEDIFF ("2011-04-17 23:50:00", "2011_04-16 14:50:00");



  • DATEDIFF (datum1, datum2) beräknar skillnaden i dagar mellan två datum. Till exempel vill vi veta hur länge sedan leverantören "Williams" (id = 1) försåg oss med varorna:

  • Funktionen PERIOD_DIFF (period1, period2) beräknar skillnaden i månader mellan två datum, representerade i formatet ÅÅÅÅMM. Låt oss ta reda på skillnaden mellan januari 2010 och augusti 2011:

    VÄLJ PERIOD_DIFF (201108, 201001);



  • TIMESTAMPDIFF (intervall, datum1, datum2) funktionen beräknar skillnaden mellan datum2 och datum1 i de enheter som anges i intervallparametern. Möjliga värden för intervallparametern:

    FRAC_SECOND - mikrosekunder
    SECOND - sekunder
    MINUT - minuter
    TIMMAR - timmar
    DAG - dagar
    VECKA - veckor
    MÅNAD - månader
    KVARTAL - kvartal
    ÅR - år

    VÄLJ TIMESTAMPDIFF (DAG, "2011-04-02", "2011-04-17") SOM dagar, TIMESTAMPDIFF (HOUR, "2011-04-16 20:14:00", "2011-04-17 23:58 : 20 ") AS timmar;



  • SUBTIME (datum, tid) funktionen subtraherar tid från datum:

    VÄLJ SUBTID ("2011-04-18 23:17:00", "02:15:30");



  • DATE (datetime) returnerar datumet och avbryter tiden. Till exempel:

    VÄLJ DATUM ("2011-04-15 00:03:20");



  • TIME (datetime) returnerar tiden genom att avkorta datumet. Till exempel:

    VÄLJ TID ("2011-04-15 00:03:20");



  • TIMESTAMP (datum) -funktionen tar datum och returnerar heltidsvarianten. Till exempel:

    VÄLJ TIMESTAMP ("2011-04-17");



  • DAY (datum) och DAYOFMONTH (datum) är synonyma funktioner som returnerar ordinalnumret för dagen i månaden från datumet:

    VÄLJ DAG ("2011-04-17"), DAYOFMONTH ("2011-04-17");



  • DAYNAME (datum), DAYOFWEEK (datum) och WEEKDAY (datum) funktioner returnerar veckodagen, den första - dess namn, den andra - veckodagens nummer (räknas från 1 - söndag till 7 - lördag), den tredje - veckodagens nummer (räknar från 0 - måndag, till 6 - söndag:

    VÄLJ DAGNAMN ("2011-04-17"), DAYOFWEEK ("2011-04-17"), VECKA ("2011-04-17");



  • WEEK (datum), WEEKOFYEAR (datetime) Båda funktionerna returnerar årets veckonummer, den första för datumtypen och den andra för datetime -typen, den första veckan börjar från söndag, den andra - från måndag:

    VÄLJ VECKA ("2011-04-17"), WEEKOFYEAR ("2011-04-17 23:40:00");



  • MONTH (datum) och MONTHNAME (datum) båda funktionerna returnerar månadsvärden. Det första är dess numeriska värde (från 1 till 12), det andra är månadens namn:

    VÄLJ MÅNAD ("2011-04-17"), MÅNADNAMN ("2011-04-17");



  • QUARTER (datum) -funktionen returnerar värdet för årets kvartal (från 1 till 4):

    VÄLJ KVARTAL ("2011-04-17");



  • Funktionen YEAR (datum) returnerar årets värde (1000 till 9999):

    VÄLJ ÅR ("2011-04-17");



  • DAYOFYEAR (datum) returnerar ordinalen för dagen under året (från 1 till 366):

    VÄLJ DAGÅR ("2011-04-17");



  • HOUR (datetime) returnerar timmen för tiden (0 till 23):

    VÄLJ TID ("2011-04-17 18:20:03");



  • MINUTE (datetime) returnerar minuterna för tiden (0 till 59): SELECT UNIX_TIMESTAMP ("2011-04-17"), FROM_UNIXTIME (1302524000);

  • TIME_TO_SEC (tid) och SEC_TO_TIME (n)ömsesidiga funktioner. Den första omvandlar tiden till antalet sekunder som har gått från början av dagen. Den andra, å andra sidan, tar antalet sekunder sedan början av dagen och konverterar dem till tiden:

    VÄLJ TIME_TO_SEC ("22:10:30"), SEC_TO_TIME (45368);



  • Funktionen MAKEDATE (år, n) tar året och dagnumret för året och konverterar dem till ett datum:

    VÄLJ MAKEDATE (2011, 120);



Det är allt för idag. Nästa gång tittar vi på funktioner som hjälper till att översätta datum från ett format till ett annat.

Hälsningar till er, kära läsare av bloggsidan. Databasen behöver ofta lagra olika data relaterade till datum och tid. Detta kan vara det datum då informationen lades till, det datum då användaren registrerades, tiden för den senaste automatiseringen och andra data. V SQL -språk det finns många funktioner relaterade till datum och tid, idag kommer vi att överväga dem.

Alla funktioner som diskuteras nedan fungerar med kalenderdatatyper.

Få aktuellt datum och tid.

För att uppnå aktuellt datum och tid funktion används NU ().

VÄLJ NU ()
Resultat: 2015-09-25 14:42:53

Bara att ta emot dagens datum det finns en funktion CURDATE ().

VÄLJ KURDAT ()
Resultat: 2015-09-25

Och funktionen CURTIME () som bara återkommer aktuell tid:

VÄLJ CURTIME ()
Resultat: 14:42:53

Funktionerna CURDATE () och NOW () är användbara för att lägga till poster i den databas som du vill lagra datumet för tillägget. Till exempel, när du lägger till en artikel på en webbplats, skulle det vara trevligt att lagra dess publiceringsdatum. Då kommer begäran om att lägga till en artikel i databasen ungefär så här:

INSERT INTO posts (id_post, text_post, date_publication) VÄRDEN (1, "post text", NOW ());

Lägg till och subtrahera datum och tider

Fungera ADDDATE (datum, INTERVAL -värde) lägger till hittills datum menande värde och returnerar det resulterande värdet. Följande värden kan användas som värde:

  • SECOND - sekunder
  • MINUT - minuter
  • TIMMAR - timmar
  • DAG - dagar
  • VECKA - veckor
  • MÅNAD - månader
  • KVARTAL - kvartal
  • ÅR - år

samt deras kombinationer:

  • MINUTE_SECOND - minuter och sekunder
  • HOUR_SECOND timmar - minuter och sekunder
  • HOUR_MINUTE - timmar och minuter
  • DAY_SECOND - dagar, timmar, minuter och sekunder
  • DAY_MINUTE - dagar, timmar och minuter
  • DAY_HOUR - dagar och timmar
  • YEAR_MONTH - år och månader.

VÄLJ ADDDATE ("2015-09-28 10:30:20", INTERVAL 1 DAG)
Resultat: 2015-09-29 10:30:20

VÄLJ ADDDATE ("2015-09-28 10:30:20", INTERVAL "3 1:20" DAY_MINUTE)
Resultat: 2015-10-01 11:50:20

Fungera SUBDATE (datum, INTERVAL -värde) producerar subtraktion värdevärden från datum datum. Exempel:

VÄLJ SUBDATUM ("2015-09-28 10:30:20", INTERVALL 20 TIMMAR)
Resultat: 2015-09-27 14:30:20

Fungera PERIOD_ADD (period, n) lägger till till värdet av period n månader... Periodens värde måste vara i formatet ÅÅÅÅMM (till exempel kommer september 2015 att vara 201509). Exempel:

VÄLJ PERIOD_ADD (201509, 4)
Resultat: 201601

Fungera TIMESTAMPADD (intervall, n, datum) lägger till hittills datum tidsintervall n, vars värden anges av intervallparametern. Möjliga värden för intervallparametern:

  • FRAC_SECOND - mikrosekunder
  • SECOND - sekunder
  • MINUT - minuter
  • TIMMAR - timmar
  • DAG - dagar
  • VECKA - veckor
  • MÅNAD - månader
  • KVARTAL - kvartal
  • ÅR - år

VÄLJ TIMESTAMPADD (KVARTAL, 1, "2015-09-28")
Resultat: 2015-12-28

Fungera SUBTIME (datum, tid) drar från datum datum tid tid. Exempel:

VÄLJ SUBTID ("2015-09-28 10:30:20", "50:20:19")
Resultat: 2015-09-26 08:10:01

Beräkna intervallet mellan datum

Fungera TIMEDIFF (datum1, datum2) beräknar skillnaden i timmar, minuter och sekunder mellan de två datumen datum1 och datum2. Exempel:

VÄLJ TIDEN ("2015-09-28 10:30:20", "2015-09-29 10:30:20")
Resultat: -24: 10: 00

Fungera DATEDIFF (datum1, datum2) beräknar skillnad i dagar mellan två datum, medan timmar, minuter och sekunder ignoreras när datum anges. Exempel:

VÄLJ DATEDIFF ("2015-09-28 00:00:20", "2015-09-27 23:40:20")
Resultat: 1

Med den här funktionen är det lätt att avgöra hur många dagar som har gått sedan artikelns publiceringsdatum:

VÄLJ DATEDIFF (CURDATE (), date_publication) FRÅN inlägg VAR id_post = 1

Fungera PERIOD_DIFF (period1, period2) beräknar skillnad i månader mellan två datum. Datum måste vara i ÅÅÅÅMM -format. Låt oss till exempel ta reda på hur många månader som har gått från januari 2015 till september 2015:

VÄLJ PERIOD_DIFF (201509, 201501)
Position: 9

Fungera TIMESTAMPDIFF (intervall, datum1, datum2) beräknar skillnaden mellan datum2 och datum1 i de enheter som anges i intervallparametern. I detta fall kan intervallet anta följande värden:

  • FRAC_SECOND - mikrosekunder
  • SECOND - sekunder
  • MINUT - minuter
  • TIMMAR - timmar
  • DAG - dagar
  • VECKA - veckor
  • MÅNAD - månader
  • KVARTAL - kvartal
  • ÅR - år

VÄLJ TIMESTAMPDIFF (HOUR, "2015-09-28 10:30:20", "2015-09-28 19:50:20")
Position: 9

Få olika format av datum och tid och annan information

Fungera DATE (datetime) returnerar datum som stänger av tiden... Exempel:

VÄLJ DATUM ("2015-09-28 10:30:20")
Resultat: 2015-09-28

Fungera TIME (datetime) returnerar tid, klipp av datumet... Exempel:

VÄLJ TID ("2015-09-28 10:30:20")
Resultat: 10:30:20

Fungera TIMESTAMP (datum) returnerar fullformat över tid datum datum. Exempel:

TIMESTAMP ("2015-09-28")
Resultat: 2015-09-28 00:00:00

Dag datum) och DAYOFMONTH (datum)... Synonyma funktioner som återkommer ordinarie nummer på dagen i månaden... Exempel:

VÄLJ DAG ("2015-09-28"), DAYOFMONTH ("2015-09-28")
Resultat: 28 | 28

Funktioner DAYNAME (datum),DAYOFWEEK (datum) och VECKA (datum)... Den första funktionen återkommer namn på veckodag, den andra är veckodag(räknas från 1 - söndag till 7 - lördag), den tredje är också veckodagens nummer bara ytterligare en räkning (räknas från 0 - måndag, till 6 - söndag). Exempel:

VÄLJ DAGNAMN ("2015-09-28"), DAYOFWEEK ("2015-09-28"), WEEKDAY ("2015-09-28")
Resultat: måndag 2 | 0

Funktioner VECKA (datum) och WEEKOFYEAR (datetime)... Båda funktionerna återkommer årets veckonummer, bara den första veckan börjar från söndag och den andra från måndag. Exempel:

VÄLJ VECKA ("2015-09-28 10:30:20"), WEEKOFYEAR ("2015-09-28 10:30:20")
Resultat: 39 | 40

Fungera MÅNAD (datum) returnerar månadens numeriska värde(från 1 till 12) och MONTHNAME (datum) månadens namn... Exempel:

VÄLJ MÅNAD ("2015-09-28 10:30:20"), MÅNADSNAMN ("2015-09-28 10:30:20")
Resultat: 9 | September

Fungera KVARTAL (datum) returnerar kvartal nummerår (från 1 till 4). Exempel:

VÄLJ KVARTAL ("2015-09-28 10:30:20")
Resultat: 3

Fungera ÅR (datum) returnerar årets värde(från 1000 till 9999). Exempel:

VÄLJ ÅR ("2015-09-28 10:30:20")
Resultat: 2015

Fungera DAYOFYEAR (datum) returnerar dagens serienummer per år (från 1 till 366). Premiärminister:

VÄLJ DAGÅR ("2015-09-28 10:30:20")
Position: 271

Fungera HOUR (datetime) returnerar timvärde(från 0 till 23). Exempel:

VÄLJ TID ("2015-09-28 10:30:20")
Position: 10

Fungera MINUT (datetime) returnerar värdet på minuter(från 0 till 59). Exempel:

VÄLJ MINUT ("2015-09-28 10:30:20")
Position: 30

Fungera ANDRA (datetime) returnerar sekunders värde(från 0 till 59). Exempel:

VÄLJ ANDRA ("2015-09-28 10:30:20")
Position: 20

Fungera EXTRAKT (typ FRÅN datum) returnerar datumdelen som anges av typparametern. Exempel:

VÄLJ EXTRAKT (ÅR FRÅN "2015-09-28 10:30:20"), EXTRAKT (MÅNAD FRÅN "2015-09-28 10:30:20"), EXTRAKT (DAG FRÅN "2015-09-28 10:30 : 20 "), EXTRAKT (TIMM FRÅN" 2015-09-28 10:30:20 "), EXTRAKT (MINUT FRA" 2015-09-28 10:30:20 "), EXTRAKT (ANDRA FRÅN" 2015-09- 28 10:30:20 ")
Resultat: 2015 | 9 | 28 | 10 | 30 | tjugo

Omvända funktioner Dagens datum) och FROM_DAYS (n)... Den första konverterar ett datum till ett antal dagar som har gått sedan år noll. Det andra, tvärtom, accepterar antal dagar som har gått sedan år noll och konverterar dem till dags dato... Exempel:

VÄLJ TO_DAYS ("2015-09-28 10:30:20"), FROM_DAYS (736234)
Resultat: 736234 | 2015-09-28

Omvända funktioner UNIX_TIMESTAMP (datum) och FROM_UNIXTIME (n)... Den första konverterar datum till antal sekunder gått sedan 1 januari 1970. Det andra, tvärtom, accepterar antal sekunder, från 1 januari 1970 och konverterar dem till dags dato... Exempel:

VÄLJ UNIX_TIMESTAMP ("2015-09-28 10:30:20"), FROM_UNIXTIME (1443425420)
Resultat: 1443425420 | 2015-09-28 10:30:20

Omvända funktioner TIME_TO_SEC (tid) och SEC_TO_TIME (n)... Den första konverterar tid till antal sekunder förflutit från början av dagen. Den andra, å andra sidan, tar antalet sekunder sedan början av dagen och omvandlar dem till tiden. Exempel:

SELECT TIME_TO_SEC ("10:30:20"), SEC_TO_TIME (37820)
Resultat: 37820 | 10:30:20

Fungera MAKEDATE (år, n) tar året år och numret på dagen i året n och konverterar dem till ett datum. Exempel.

Transact-SQL-funktioner kan vara aggregerade eller skalära. Dessa typer av funktioner diskuteras i denna artikel.

Sammanlagda funktioner

Aggregatfunktioner utför beräkningar på en grupp kolumnvärden och returnerar alltid ett enda värde från dessa beräkningar. Transact-SQL stöder flera vanliga aggregerade funktioner:

AVG

Beräknar det aritmetiska medelvärdet för data i en kolumn. De värden som beräknas måste vara numeriska.

MIN och MAX

Bestäm maximi- och minimivärdet för alla datavärden i kolumnen. Värden kan vara numeriska, strängar eller tid (datum / tid).

BELOPP

Beräknar summan av värdena i en kolumn. De värden som utvärderas måste vara numeriska.

RÄKNA

Räknar antalet icke-nullvärden i en kolumn. Funktionen count (*) är den enda aggregerade funktionen som inte utför beräkningar på kolumner. Denna funktion returnerar antalet rader (oavsett om de enskilda kolumnerna innehåller nollvärden).

COUNT_BIG

Liknar räknefunktionen, med skillnaden att den returnerar ett BIGINT -datavärde.

Användningen av vanliga aggregerade funktioner i en SELECT -sats kommer att behandlas i en framtida artikel.

Skalärfunktioner

Transact-SQL skalarfunktioner används vid skapandet av skaläruttryck. (En skalärfunktion utför beräkningar på ett enda värde eller en lista med värden, medan en aggregerad funktion utför beräkningar på en grupp värden från flera rader.) Skalärfunktioner kan kategoriseras enligt följande:

    numeriska funktioner;

    datumfunktioner;

    strängfunktioner;

    systemfunktioner;

    metadata funktioner.

Dessa typer av funktioner diskuteras i följande avsnitt.

Numeriska funktioner

Transact-SQL numeriska funktioner är matematiska funktioner för att ändra numeriska värden. En lista över numeriska funktioner och deras korta beskrivning ges i tabellen nedan:

Transact-SQL numeriska funktioner
Fungera Syntax Beskrivning Användningsexempel
magmuskler ABS (n)

Returnerar det absoluta värdet (det vill säga negativa värden returneras som positiva) för det numeriska uttrycket n.

SELECT ABS (-5.320) - Returnerar 5.320 SELECT ABS (8.90) - Returnerar 8.90

ACOS, ASIN, ATAN, ATN2 ACOS (n), ASIN (n), ATAN (n), ATN2 (n, m)

Inversa trigonometriska funktioner som beräknar invers cosinus, invers sinus och arktangent av värdet n (för ATN2 beräknas arktangenten n / m). De ursprungliga värdena n, m och resultatet är av FLOAT -datatypen.

COS, SIN, TAN, COT COS (n), SIN (n), TAN (n), COT (n)

Trigonometriska funktioner som beräknar cosinus, sinus, tangent, cotangent av värdet n. Resultatet är av datatypen FLOAT.

GRADER, RADIER GRADER (n), RADIANS (n)

DEGREES -funktionen omvandlar radianer till grader, RADIANS respektive tvärtom.

VÄLJ GRADER (PI () / 4) - Returnerar 45 SELECT COS (RADIANS (60.0)) - Returnerar 0.5

TAK TAK (n)

Avrundar ett tal upp till ett större heltal.

VÄLJ TAK (-5.320) - Returnerar -5 VÄLJ TAK (8,90) - Returnerar 9

RUNDA RUND (n, p, [t])

Avrundar n till närmaste sid. När p är ett positivt tal avrundas bråkdelen av n, och när den är negativ avrundas heltalet. När du använder det valfria argumentet t, är talet n inte avrundat utan avkortat (dvs. avrundat nedåt).

VÄLJ RUND (5.3208, 3) - Returnerar 5.3210 VÄLJ RUND (125.384, -1) - Returnerar 130.000 VÄLJ RUND (125.384, -1, 1) - Returnerar 120.000

GOLV GOLV (n)

Avrundar ner till det minsta heltalet.

VÄLJ GOLV (5,88) - Returnerar 5

EXP EXP (n)

Beräknar värdet på e n.

LOGG, LOG10 LOG (n), LOG10 (n)

LOG (n) - beräknar den naturliga logaritmen (dvs. bas e) för n, LOG10 (n) - beräknar decimal (bas 10) logaritmen för n.

PI PI ()

Returnerar π (3.1415)

KRAFT POWER (x, y)

Beräknar x y -värdet.

RAND RAND ()

Returnerar ett godtyckligt antal av typen FLOAT i värdena mellan 0 och 1.

ROWCOUNT_BIG ROWCOUNT_BIG ()

Returnerar antalet tabellrader som bearbetades av den senaste Transact-SQL-satsen som kördes av systemet. Returvärdet är av typen BIGINT.

SKYLT Tecken (n)

Returnerar tecknet för värdet n som ett tal: +1 om det är positivt, -1 om det är negativt.

SQRT, SQUARE SQRT (n), SQUARE (n)

SQRT (n) - beräknar kvadratroten på n, SQUARE (n) - returnerar kvadraten för argumentet n.

Datumfunktioner

Datumfunktioner utvärderar motsvarande delar av datum eller tid för ett uttryck, eller returnerar ett tidsintervallvärde. Datumfunktionerna som stöds av Transact-SQL och deras korta beskrivningar visas i tabellen nedan:

Transact-SQL-datumfunktioner
Fungera Syntax Beskrivning Användningsexempel
GETDATE GETDATE ()

Returnerar det aktuella systemets datum och tid.

VÄLJ GETDATE ()

DATEPART DATEPART (artikel, datum)

Returnerar datumdelen som anges i artikelparametern som ett heltal.

Returnerar 1 (januari) SELECT DATEPART (månad, "01.01.2012") - Returnerar 4 (onsdag) SELECT DATEPART (vardag, "02.01.2012")

DATENAME DATENAME (objekt, datum)

Returnerar datumdelen som anges i artikelparametern som en teckensträng.

Returnerar januari SELECT DATENAME (månad, "01/01/2012") - Returnerar onsdag SELECT DATENAME (vardag, "01/02/2012")

DATEDIFF DATEDIFF (item, dat1, dat2)

Beräknar skillnaden mellan de två delarna av datumen dat1 och dat2 och returnerar ett heltalsresultat i de enheter som anges i artikelargumentet.

Returnerar 19 (19 års intervall mellan datum) SELECT DATEDIFF (år, "01/01/1990", "01/01/2010") - Returnerar 7305 (7305 dagars intervall mellan datum) SELECT DATEDIFF (dag, "01/01/2010" 1990 "," 01/01 .2010 ")

DATEADD DATEADD (artikel, n, datum)

Lägger till det n: e antalet enheter som anges i artikelargumentet till det angivna datumet. (Värdet för n kan också vara negativt.)

Lägg till 3 dagar till det aktuella datumet VÄLJ DATEADD (dag, 3, GETDATE ())

Strängfunktioner

Strängfunktioner manipulerar kolumnvärden, som vanligtvis är av teckendatatyp. Strängfunktionerna som stöds i Transact-SQL och deras korta beskrivning visas i tabellen nedan:

Transact-SQL-strängfunktioner
Fungera Syntax Beskrivning Användningsexempel
ASCII, UNICODE ASCII (röding), UNICODE (röding)

Konverterar det angivna tecknet till motsvarande ASCII -heltal.

SELECT ASCII ("W") - 87 SELECT UNICODE ("u") - 1102

CHAR, NCHAR CHAR (int), NCHAR (int)

Konverterar ASCII -kod (eller Unicode om NCHAR) till motsvarande tecken.

SELECT CHAR (87) - "W" SELECT NCHAR (1102) - "u"

CHARINDEX CHARINDEX (str1, str2)

Returnerar startpositionen för förekomsten av delsträngen str1 i strängen str2. Om sträng str2 inte innehåller delsträng str1 är returvärdet 0

Returnerar 5 SELECT CHARINDEX ("morph", "polymorfism")

SKILLNAD SKILLNAD (str1, str2)

Returnerar ett heltal från 0 till 4, vilket är skillnaden mellan SOUNDEX -värdena för de två strängarna str1 och str2. SOUNDEX -metoden returnerar ett tal som kännetecknar strängens ljud. Med den här metoden kan du identifiera strängar med liknande ljud. Fungerar endast för ASCII -tecken.

Returnerar 2 SELECT DIFFERENCE ("stavning", "berättande")

VÄNSTER HÖGER VÄNSTER (str, längd), HÖGER (str, längd)

Returnerar antalet första tecken i strängstr som anges av längdparametern för VÄNSTER och de sista längdstecknen på strängstr för HÖGER -funktionen.

DECLARE @str nvarchar (30) = "Synkronisering"; - Returnerar "Synkronisera" VÄLJ VÄNSTER (@str, 4) - Returnerar "zats" VÄLJ HÖGER (@str, 5)

LEN LEN (str)

Returnerar antalet tecken (inte antalet byte) i str som anges i argumentet, inklusive efterföljande mellanslag.

NEDRE ÖVRE LOWER (str), UPPER (str)

LOWER -funktionen konverterar alla stora bokstäver i str1 till gemener. Små bokstäver och andra tecken som ingår i strängen påverkas inte. UPPER -funktionen konverterar alla små bokstäver i str till stora bokstäver.

DECLARE @str nvarchar (30) = "Synkronisering"; - Returnerar "SYNKRONISERING" SELECT UPPER (@str) - Returnerar "synkronisering" SELECT LOWER (@str)

LTRIM, RTRIM LTRIM (str), RTRIM (str)

LTRIM -funktionen tar bort ledande mellanslag i strängen str, RTRIM tar bort mellanslag i slutet av strängen i enlighet därmed.

KVOTENAMN QUOTENAME (char_string)

Returnerar en avgränsad Unicode -sträng för att konvertera inmatningssträngen till en giltig avgränsad identifierare.

DECLARE @str nvarchar (30) = "Synkronisering"; - Returnerar "[Synk]" VÄLJ KVOTENAMN (@str)

PATINDEX PATINDEX (% p%, expr)

Returnerar startpositionen för den första förekomsten av mönstret p i den angivna expr, eller noll om det angivna mönstret inte hittas.

Returnerar 4 SELECT PATINDEX ("% chro%", "Synkronisering")

BYTA UT Byt ut (str1, str2, str3)

Ersätter alla förekomster av str2 i str1 med str3.

Returnerar "Desynchronization" SELECT REPLACE ("Synchronization", "Synchronization", "Desynchronization")

ÅTERSKAPA REPLIKA (str, i)

Upprepar strängen str i gånger.

Returnerar "aBaBaBaBaB" SELECT REPLICATE ("aB", 5)

OMVÄND BACK (str)

Matar ut str str i omvänd ordning.

Returnerar "yicazinorkhnis" SELECT REVERSE ("Synkronisering")

SOUNDEX SOUNDEX (str)

Returnerar soundex med fyra tecken som används för att bestämma likheten mellan två strängar. Fungerar endast för ASCII -tecken.

PLATS SPACE (längd)

Returnerar en rad mellanslag med den längd som anges i längdparametern. Analog REPLIKAT ("", längd).

STR STR (f [, len [, d]])

Konverterar det angivna flytande uttrycket f till en sträng, där len är strängens längd, inklusive decimalpunkt, tecken, siffror och mellanslag (standard är 10) och d är antalet decimaler som ska returneras.

Returnerar "3.14" SELECT STR (3.1415, 4, 2)

GREJER STUFF (str1, a, längd, str2)

Tar bort längdstecken från sträng str1, med början vid position a och infogar sträng str2 på plats.

Anteckning i en bok SELECT STUFF ("Notebook", 5, 0, "in a") - Handbook SELECT STUFF ("Notebook", 1, 4, "Hand")

UNDERGÅNG SUBSTRING (str1, a, längd)

Hämtar från strängstr, med början vid position a, en delsträng med längdlängd.

Systemfunktioner

Transact-SQL-systemfunktioner ger omfattande information om databasobjekt. De flesta systemfunktioner använder en intern numerisk identifierare (ID) som tilldelas varje databasobjekt när det skapas. Genom denna identifierare kan systemet identifiera varje databasobjekt på ett unikt sätt.

Följande tabell listar några av de viktigaste systemfunktionerna tillsammans med en kort beskrivning:

Transact-SQL-systemfunktioner
Fungera Syntax Beskrivning Användningsexempel
KASTA CAST (med AS -typ [(längd)]

Konverterar uttrycket w till den angivna datatypen, om tillämpligt. W -argumentet kan vara valfritt uttryck.

Kommer tillbaka 3 SELECT CAST (3.1258 AS INT)

VÄXA SAMMAN COALESCE (a1, a2)

Returnerar det första icke-null-uttrycksvärdet från uttryckslistan a1, a2, ....

COL_LENGTH COL_LENGTH (obj, kol)

Returnerar längden på kolumnkolumnen för databasobjektet (tabell eller vy) obj.

Returnerar 4 SELECT COL_LENGTH ("Anställd", "Id")

KONVERTERA KONVERTERA (typ [(längd)], w)

Motsvarar funktionen CAST, men argumenten specificeras annorlunda. Den kan användas med vilken datatyp som helst.

CURRENT_TIMESTAMP CURRENT_TIMESTAMP

Returnerar aktuellt datum och tid.

NUVARANDE ANVÄNDAREN NUVARANDE ANVÄNDAREN

Returnerar namnet på den aktuella användaren.

DATALÄNGD DATALENGTH (z)

Returnerar antalet byte som uttrycket z upptar.

Denna fråga returnerar längden på varje fält VÄLJ DATALÄNGD (Förnamn) FRÅN Anställd

GETANSINULL GETANSINULL ("dbname")

Returnerar 1 om användningen av nullvärden i dbname -databasen uppfyller ANSI SQL -standarden.

ÄR INGET ISNULL (expr, värde)

Returnerar värdet på expr om det inte är NULL; annars returneras värdet.

ISNUMERISK ISNUMERISK (expr)

Avgör om expr är en giltig numerisk typ.

NEWID NEWID ()

Skapar en unik 16-byte binär sträng för lagring av värden av datatypen UNIQUEIDENTIFIER.

NEWSEQUENTIALID NEWSEQUENTIALID ()

Skapar ett GUID som är större än något annat GUID som tidigare genererats av denna funktion på den angivna datorn. (Den här funktionen kan bara användas som standard för en kolumn.)

NULLIF NULLIF (expr1, expr2)

Returnerar null om värdena för expr1 och expr2 är desamma.

Frågan returnerar NULL för projektet - som har Number = "p1" SELECT NULLIF (Number, "p1") FRÅN Project

SERVERPROPERTY SERVERPROPERTY (fastighetsnamn)

Hämtar information om databasserverns egenskaper.

SYSTEM_USER SYSTEM_USER

Returnerar ID för den aktuella användaren.

ANVÄNDAR ID ANVÄNDAR ID ()

Returnerar användarnamnets användar -ID. Om ingen användare har angetts returneras det nuvarande användar -ID: t.

ANVÄNDARNAMN ANVÄNDARNAMN ()

Returnerar användarnamnet med det angivna id: t. Om ingen identifierare anges, returneras den nuvarande användarens namn.

Metadata funktioner

I grund och botten returnerar metadatafunktioner information om en angiven databas och databasobjekt. Tabellen nedan sammanfattar några av de viktigaste metadatafunktionerna, tillsammans med en kort beskrivning:

Transact-SQL Metadata-funktioner
Fungera Syntax Beskrivning Användningsexempel
COL_NAME COL_NAME (tab_id, col_id)

Returnerar namnet på kolumnen med det angivna col_id i tabellen med tab_id.

Returnerar kolumnnamnet "Efternamn" SELECT COL_NAME (OBJECT_ID ("anställd"), 3)

KOLONNEIGANDE COLUMNPROPERTY (id, col, property)

Returnerar information om den angivna kolumnen.

Returnerar värdet för PRECISION -egenskapen - för kolumnen Id i medarbetartabellen VÄLJ KOLOMPROPERTY (OBJECT_ID ("Anställd"), "Id", "precision")

DATABASPROPERTY DATABASEPROPERTY (databas, egendom)

Returnerar värdet för egenskapens egenskap för databasdatabasen.

Returnerar värdet för egenskapen IsNullConcat - för SampleDb -databasen SELECT DATABASEPROPERTY ("SampleDb", "IsNullConcat")

DB_ID DB_ID ()

Returnerar databasidentifieraren db_name. Om inget databasnamn har angetts returneras den aktuella databasidentifieraren.

DB_NAME DB_NAME ()

Returnerar namnet på databasen med db_id. Om ingen identifierare anges, returneras namnet på den aktuella databasen.

INDEX_COL INDEX_COL (tabell, i, nej)

Returnerar namnet på den indexerade kolumnen i tabelltabellen. Kolumnen indikeras med indexidentifieraren i och kolumnens position nr i indexet.

INDEXPROPERTY INDEXPROPERTY (obj_id, index_name, property)

Returnerar egenskaperna för det namngivna indexet eller statistiken för det angivna tabellidentifikationsnumret, indexets eller statistikens namn och egenskapens namn.

OBJECT_NAME OBJECT_NAME (obj_id)

Returnerar namnet på databasobjektet med identifieraren obj_id.

VÄLJ OBJECT_NAME (245575913);

OBJECT_ID OBJECT_ID (obj_name)

Returnerar objektidentifieraren obj_name för databasen.

Returnerar 245575913 - Anställd tabell -ID SELECT OBJECT_ID ("Anställd")

OBJEKTFÖRETAG OBJECTPROPERTY (obj_id, egendom)

Returnerar information om objekt från den aktuella databasen.

Senast uppdaterad: 29/07/2017

T-SQL har ett antal funktioner för att arbeta med datum och tider:

    GETDATE: Returnerar aktuellt lokalt datum och tid baserat på systemklockan som ett datetime -objekt

    VÄLJ GETDATE ()-2017-07-28 21: 34: 55.830

    GETUTCDATE: Returnerar det aktuella lokala datumet och tiden i Greenwich Mean Time (UTC / GMT) som ett datetime -objekt

    VÄLJ GETUTCDATE ()-2017-07-28 18: 34: 55.830

    SYSDATETIME: Returnerar det aktuella lokala datumet och tiden baserat på systemklockan, men skillnaden från GETDATE är att datum och tid returneras som ett datetime2 -objekt

    VÄLJ SYSDATETIME ()-2017-07-28 21: 02: 22.7446744

    SYSUTCDATETIME: Returnerar det aktuella lokala datumet och tiden i Greenwich Mean Time (UTC / GMT) som ett datetime2 -objekt

    VÄLJ SYSUTCDATETIME ()-2017-07-28 18:20: 27.5202777

    SYSDATETIMEOFFSET: Returnerar ett datetimeoffset (7) -objekt som innehåller datum och tid i förhållande till GMT

    VÄLJ SYSDATETIMEOFFSET ()-2017-07-28 21: 02: 22.7446744 +03: 00

    DAY: returnerar dagen för datumet, som skickas som en parameter

    VÄLJ DAG (GETDATE ()) - 28

    MÅNAD: Returnerar månadens datum

    VÄLJ MÅNAD (GETDATE ()) - 7

    YEAR: Returnerar året från ett datum

    VÄLJ ÅR (GETDATE ()) - 2017

    DATENAME: Returnerar datumdelen som en sträng. Parametern för att välja datumets del skickas som den första parametern och själva datumet skickas som den andra parametern:

    VÄLJ DATENAMN (månad, GETDATE ()) - juli

    Följande parametrar kan användas för att bestämma datumets del (deras förkortade versioner anges inom parentes):

    • år (åå, åååå): år

      kvartal (qq, q): kvartal

      månad (mm, m): månad

      dayofyear (dy, y): årets dag

      dag (dd, d): dag i månaden

      vecka (wk, ww): vecka

      vardag (dw): veckodag

      timme (hh): timme

      minut (mi, n): minut

      andra (ss, s): andra

      millisekund (ms): millisekund

      mikrosekund (mcs): mikrosekund

      nanosekund (ns): nanosekund

      tzoffset (tz): blanda i minuter i förhållande till greenwich (för datetimeoffset -objekt)

    DATEPART: Returnerar en del av datumet som ett nummer. Parametern för att välja datumets del skickas som den första parametern (samma parametrar används som för DATENAME) och själva datumet skickas som den andra parametern:

    VÄLJ DATUM (månad, GETDATE ()) - 7

    DATEADD: Returnerar ett datum som är resultatet av att ett nummer läggs till i en specifik datumkomponent. Den första parametern representerar datumkomponenten som beskrivs ovan för DATENAME -funktionen. Den andra parametern är beloppet som ska läggas till. Den tredje parametern är själva datumet, till vilket tillägget måste göras:

    VÄLJ DATUMADD (månad, 2, "2017-7-28")-2017-09-28 00: 00: 00.000 VÄLJ DATUMADD (dag, 5, "2017-7-28")-2017-08-02 00: 00 : 00.000 VÄLJ DATUM ADD (dag, -5, "2017-7-28")-2017-07-23 00: 00: 00.000

    Om den extra kvantiteten är ett negativt tal, minskas datumet faktiskt.

    DATEDIFF: Returnerar skillnaden mellan två datum. Den första parametern är datumkomponenten, som anger i vilka enheter skillnaden ska mätas. Den andra och tredje parametern är datumen som ska jämföras:

    VÄLJ DATEDIFF (år, "2017-7-28", "2018-9-28")-skillnad 1 år VÄLJ DATEDIFF (månad, "2017-7-28", "2018-9-28")-skillnad 14 månader VÄLJ DATEDIFF (dag, "2017-7-28", "2018-9-28")-427 dagars skillnad

    TODATETIMEOFFSET: Returnerar ett datetimeoffset -värde som är resultatet av att tidsförskjutningen läggs till ett annat datetimeoffset -objekt

    VÄLJ TODATETIMEOFFSET ("2017-7-28 01:10:22", "+03: 00")

    SWITCHOFFSET: Returnerar datetimeoffset -värdet som är resultatet av att tidsförskjutningen läggs till datetime2 -objektet

    VÄLJ SWITCHOFFSET (SYSDATETIMEOFFSET (), "+02: 30")

    EOMONTH: Returnerar datumet för den sista dagen för den månad som används i det datum som skickades som en parameter.

    VÄLJ EOMONTH ("2017-02-05")-2017-02-28 VÄLJ EOMONTH ("2017-02-05", 3)-2017-05-31

    Som en valfri andra parameter kan du skicka antalet månader för att lägga till datumet. Då beräknas den sista dagen i månaden för det nya datumet.

    DATEFROMPARTS: efter år, månad och dag skapar ett datum

    VÄLJ DATEFROMPARTS (2017, 7, 28)-2017-07-28

    ISDATE: Kontrollerar om uttrycket är ett datum. Om så är fallet returnerar det 1, annars returnerar det 0.

    SELECT ISDATE ("2017-07-28") - 1 SELECT ISDATE ("2017-28-07") - 0 SELECT ISDATE ("07/28/2017") - 0 SELECT ISDATE ("SQL") - - 0

Ett exempel på att använda funktionerna är att skapa en tabell med order som innehåller orderdatumet:

SKAPA TABELL Beställningar (Id INT IDENTITY PRIMARY KEY, ProductId INT NOT NULL, CustomerId INT NOT NULL, CreatedAt DATE NOT NULL DEFAULT GETDATE (), ProductCount INT DEFAULT 1, Price PENES NOT NULL);

DEFAULT GETDATE () - satsen indikerar att om datumet inte passeras när data läggs till beräknas det automatiskt med funktionen GETDATE ().

Ett annat exempel - låt oss hitta order som gjordes för 16 dagar sedan:

VÄLJ * FRÅN beställningar VAR DATEDIFF (dag, CreatedAt, GETDATE ()) = 16

SQL som arbetar med datum- är så viktigt att det är omöjligt att göra utan kunskap om grundläggande sql -operatörer i något värdefullt projekt. Vad man än kan säga, men i alla tjänster finns det ett behov av att arbeta med tiden. Som regel är detta beräkningen av perioder från ett datum till ett annat, till exempel genom att visa en lista över registrerade användare under ett år, månad, dag, timme.

Jag vill ge ett antal lösningar på vanliga uppgifter för att arbeta med datum i SQL, som jag själv stött på dagligen, jag hoppas att detta kommer att vara relevant och användbart för dig.

Hur man får det aktuella datumet i SQL
VAR datum = CURDATE ()
eller ett annat alternativ
VAR datum = STR_TO_DATE (nu (), "% Y-% m-% d")

Lägg till en timme hittills i SQL
DATE_ADD ("2013-03-30", INTERVAL 1 HOUR)

Lägg till en dag hittills i SQL
DATE_ADD ("2013-03-30", INTERVAL 1 DAG)
På samma sätt kan du lägga till valfritt antal dagar till det aktuella datumet.

Lägg till en månad hittills i SQL
DATE_ADD ("2013-03-30", INTERVAL 1 MÅNAD)
På samma sätt kan du lägga till valfritt antal månader till det aktuella datumet.

Få igår i SQL
DATE_ADD (CURDATE (), INTERVAL -1 DAG)
eller
DATE_SUB (CURDATE (), INTERVAL 1 DAG)

Få startdatum för den aktuella veckan i SQL
Detta är en av de svåraste uppgifterna vid första anblicken, men det är väldigt enkelt att lösa
CURDATE () - WEEKDAY (CURDATE ());

Hämta från denna måndag till nuvarande veckodag i SQL

Få prov från första dagen i den aktuella månaden till den aktuella veckodagen i SQL
VAR (datum MELLAN (CURDATE () - WEEKDAY (CURDATE ()) OCH CURDATE ())

Hur får man en användares födelsedatum i SQL
SELECT namn, födelse, CURRENT_DATE, (YEAR (CURRENT_DATE) -YEAR (födelse)) - (RIGHT (CURRENT_DATE, 5)

Hitta alla användare som har födelsedag nästa månad i SQL
VÄLJ namn, födelse FRÅN användare VAR MÅNAD (födelse) = MÅNAD (DATUM_ADD (NU (), INTERVAL 1 MÅNAD));
eller ett annat alternativ
VÄLJ namn, födelse FRÅN husdjur VAR MÅNAD (födelse) = MOD (MÅNAD (NU ()), 12) + 1;

Förutom ovanstående fall om att arbeta med datum i SQL, rekommenderar jag att du gör dig bekant med dokumentationen för följande operatörer:
NU ()- Returnerar aktuellt datum och tid.
CURDATE ()- Returnerar det aktuella datumet.
CURTIME ()- Vi återkommer den aktuella tiden.
DATUM ()- Består av två delar av datum och tid.
EXTRAKT ()- Returnerar ett datum / tid -värde.
DATE_ADD ()- Lägger till det angivna antalet dagar / minuter / timmar, etc. i provet.
DATE_SUB ()- Dra det angivna intervallet från datumet.
DATEDIFF ()- Returnerar tidsvärdet mellan två datum.
DATUMFORMAT ()- Funktion för att visa annan tidsinformation.

Att arbeta med datum i SQl, som det visar sig, är inte så svårt, och nu, istället för att beräkna perioder med PHP, kan du göra det i steget att köra en SQL -fråga och få det nödvändiga datavalget.







2021 gtavrl.ru.