datum och tider är extremt frustrerande datatyper och SQL gör dem inte lättare att arbeta med än andra språk. Medan datum och tid faktiskt är helt olika datatyper slås de ofta samman till en datetime-datatyp. SQL-datum och tider ensam är ganska enkla trots att de kräver en speciell formatering. Att slå samman de två kan dock vara en av de mest smärtsamma uppgifterna du kommer att möta under dina tidiga år. En bra tumregel är att bara använda en tid och datum tillsammans när du absolut behöver eller kommer att behöva i framtiden. Jag ska förklara varför datum och tider komplicerar saker på bara en minut. Först, låt oss titta på hur lätt livet när du bara arbetar med datum.
arbeta med SQL-datum
vår” användare ” tabell:
id | username | first | last | member_since |
---|---|---|---|---|
1 | ohBillNotAgain | Hillary | Clinton | 2011-12-25 |
2 | internetCreator | Al | Gore | 2011-12-8 |
3 | dontMessWithTexas | George | Bush | 2011-7-9 |
Let’s try to get all of our members before December 25, 2011.
exempel
SELECT *FROM UsersWHERE member_since < '2011-12-25'
resultat
id | användarnamn | först | senast | member_since |
---|---|---|---|---|
2 | internetcreator | al | Gore | 2011-12-8 |
3 | dontmesswithtexas | George | Bush | 2011-7-9 |
okej, vi sa före den 25 december 2011, vilket betyder att dålig Hillary inte ingår eftersom hon är den dagen. Al gjorde knappt snittet, men gamla George var långt före vårt avstängningsdatum. Jag antar att vi faktiskt borde prata om vad som hände. Fram till var member_since < ’2011-12-25’ vet vi vad som gjorde. Vi kan nog gissa vad som händer här, men jag slår den döda hästen. Vi kontrollerar vår member_since-kolumn för att se om den är mindre än, <, vårt datum, som skrevs i enstaka citat som ”2011-12-25”. Ofta när googling om hjälp med datum, du ser denna syntax kallas ’ÅÅÅÅ-MM-DD’, där Y är för år, M är för månad, och D är för dag, självklart. Varje upprepning är en symbol för ett tomt teckenutrymme för det elementet. Så du vill bara ha 2 siffror i månaden eftersom det är vettigt, och kanske bryr du dig inte om årets första 2 tecken. Istället skriver du bara, YY för att få 11. Lätt nog, på den underbara DATETIMEs
använda DATETIME i SQL
vår nya” användare ” tabell:
id | username | first | last | last_login |
---|---|---|---|---|
1 | ohBillNotAgain | Hillary | Clinton | 2011-12-24 12:59:15 |
2 | internetCreator | Al | Gore | 2011-12-24 11:53:25 |
3 | dontMessWithTexas | George | Bush | 2011-12-24 16:24:17 |
Nu försöker vi få alla våra medlemmar som loggade in tidigare före 1:00 pm 24 December 2011.
exempel
SELECT * FROM UsersWHERE last_login < '2011-12-24 13:00:00'
resultat
id | användarnamn | första | sista | last_login |
---|---|---|---|---|
1 | ohbillnotagain | Hillary | Clinton | 2011-12-24 12:59:15 |
2 | internetcreator | al | Gore | 2011-12-24 11:53:25 |
Dålig George… okej, exakt samma syntax som en sista med förutom att vi ersatte kolumnnamnet och använde en DATETIME-sträng för att jämföra mot. Datatypen DATETIME innehåller alla samma element som datatypen datum plus en tidssträng. Vanligtvis refereras som ’ÅÅÅÅ-MM-DD HH:MM: SS’ igen, i enstaka citat och med ett utrymme som skiljer datumsträngen från tidssträngen, vi skapar vår datumsträng för jämförelse. Hillary och Al gör båda klippet eftersom de loggade in före ’ 2011-12-24 13: 00:00 ’ klipp av DATETIME. Det är mycket lättare här än det ser ut i praktiken. Det beror på att vi lägger in datetime-strängen för hand. SQL har några datumfunktioner du kan leka med som du kan ersätta vår sträng med:
viktiga SQL DATE-funktioner
Obs: SQL DATE-funktioner skiljer sig mycket mellan SQL-versioner. Det här är MySQL.
- CURDATE() – får aktuellt datum
- CURTIME() – får aktuell tid
- nu() – får både datum och tid (i DATETIME-format)
om du inte använder MySQL, överväga att byta. Bara skojar, typ av, men inga bekymmer, en enkel fråga från Google hjälper dig att hitta rätt SQL-funktioner för din SQL-databas.