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 - årVÄ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 - årVÄ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);
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:
AVGBeräknar det aritmetiska medelvärdet för data i en kolumn. De värden som beräknas måste vara numeriska.
MIN och MAXBestäm maximi- och minimivärdet för alla datavärden i kolumnen. Värden kan vara numeriska, strängar eller tid (datum / tid).
BELOPPBeräknar summan av värdena i en kolumn. De värden som utvärderas måste vara numeriska.
RÄKNARä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_BIGLiknar 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:
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:
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:
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:
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:
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:
å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)
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):
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 Hitta alla användare som har födelsedag nästa månad i SQL 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: 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.
SELECT namn, födelse, CURRENT_DATE, (YEAR (CURRENT_DATE) -YEAR (födelse)) - (RIGHT (CURRENT_DATE, 5)
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;
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.