te gebruiken In deze video zullen we u vertellen hoe de SQL tussen operator te gebruiken; we zullen u laten zien waarom u de tussen operator wilt gebruiken en hoe u valkuilen kunt vermijden wanneer u deze gebruikt met het DATETIME-type.
De TUSSENOPERATOR is gelijk aan het gebruik en de combinatie van >= en <= vergelijkingsoperators, maar zorgt voor een compactere bereikvergelijking. Als je eenmaal door dit artikel bent gegaan, zou ik aanraden om onze volgende essentiële SQL Minute te bekijken om verder te leren over SQL Server!
Als u de video hebt bekeken, bekijk dan de voorbeeldcode hieronder. Ik heb ook een transcript voor u om te gebruiken.
dit is een SQL minuut op de tussen Operator!
Welkom bij een andere essentiële SQL-minuut. In deze aflevering gaan we leren hoe we de tussen operator kunnen gebruiken om een reeks waarden in SQL server queries te vergelijken.
De tussen operator wordt gebruikt om een bereik van waarden te vergelijken. Hier is een voorbeeld waar ik het gebruik om een bereik van waarden die groter zijn dan of gelijk aan 12, en kleiner dan of gelijk aan 28 te vergelijken. Als Ik gebruik maken van de tussen operator, het is inclusief.
Het zal de getallen bevatten die we daartussen vergelijken. De gebruikelijke vorm voor het gebruik van tussen in de WHERE clausule is om het veld te specificeren, dus in dit geval is het “IsoNumericCode”, dat is het veld. Dan de tussen operators; we zeggen dat we willen dat de” IsoNumericCode ” tussen en dan de range. Dus we willen dat het tussen 12 en 28 is.
u vraagt zich misschien af hoe dit er op de ouderwetse manier uit zou zien met behulp van groter dan en gelijk aan en kleiner dan en gelijk aan. Zo zou het eruit zien. Als we hetzelfde zouden doen met behulp van groter dan en gelijk aan en kleiner dan en gelijk aan, zouden we hebben waar IsoNumericCode >=12 en isonumericcode <= 28.
goed ,dus laten we naar binnen gaan om te zien hoe dit eruit ziet in SQL server. Ik heb onze query geladen in SQL server. Je kunt hier zien dat we gaan zoeken naar de Isonumerieke Code tussen 12 en 28, Het is op dezelfde regel, het is typisch hoe het zou worden geschreven.
SELECT CountryID ,CountryName ,IsoAlpha3Code FROM Application.Countries WHERE IsoNumericCode BETWEEN 12 and 28
laat me dat uitvoeren, en breng dit hier een beetje naar boven. U kunt zien dat het bereik van waarden die terugkomen van 12 tot 28 zijn. Als ik dit zou verhogen, laten we zeggen tot 100, zou ik verwachten dat er meer rijen terugkomen. Je kunt zien dat ze helemaal tot 100 gaan.
nu wil ik u waarschuwen dat volgorde er wel toe doet. Als ik dat deed tussen de 100 en 12, zal ik geen resultaten krijgen.
want, als je erover nadenkt, wat dit zegt is dat Ik wil dat de numerieke codes tussen … Ik wil dat het groter is dan of gelijk aan 100, en kleiner dan of gelijk aan 12. Daar zit niets tussen. Dus het is een fout niets komt terug. Dus orde is belangrijk, en het is belangrijk dat je het hebt, zodat het gebruik van de tussen operator, het laagste nummer eerst is. Goed, laten we teruggaan naar 12 en 28.
een ander ding dat ik kan doen is niet operator gebruiken met tussen. Dus als Ik zeg “niet tussen 12 en 28” wat ik eigenlijk zeg is, laten we elke rij in de landen tabel terugbrengen die geen numerieke code heeft die groter of gelijk is aan 12, en kleiner of gelijk aan 28.
SELECT CountryID ,CountryName ,IsoAlpha3Code FROM Application.Countries WHERE IsoNumericCode NOT BETWEEN 12 and 28
dus in wezen zouden deze vier rijen uit dat resultaat worden gesneden. Laten we dit doen. Je ziet nu dat ik 186 rijen krijg.
als ik gewoon de query regelrecht deed zonder enige beperkingen, zul je zien dat ik 190 rijen terug krijg. Dus dit dient om je te laten zien dat die vier rijen inderdaad werden uitgesneden. In feite, als je nog een test wilt doen kan ik gewoon zeggen of Isonumerieke Code tussen 12 en 28 en dit zou alles terugbrengen.
SELECT CountryID ,CountryName ,IsoAlpha3Code FROM Application.Countries WHERE IsoNumericCode NOT BETWEEN 12 and 28 OR IsoNumericCode BETWEEN 12 and 28
Dit brengt 190 rijen terug. Echt, Dit is een beetje onzinnig in de zin dat het alle rijen terugbrengt.
al onze voorbeelden tot nu toe hebben gewerkt met het gehele getal. Maar tussen werkt met vele andere data type. We kunnen het ook gebruiken voor character data types (VARCHAR), en het zou op dezelfde manier werken, zolang we de collation orders hebben ingesteld, werkt alles prima.
een gegevenstype waarvan ik denk dat u voorzichtig moet zijn is het “DateTime” gegevenstype.
omdat in het datetime gegevenstype, zult u zien dat er een tijdcomponent in de datum is, en als we gewoon een tussen het gebruik van alleen de dag en niet de tijd doen, zullen de datum en tijd standaard tot middernacht zijn. Het is echt niet het krijgen van alle resultaten die je denkt dat het zou. Ik denk dat de beste manier om dit te doen is om je te laten zien wat ik bedoel.
DECLARE @myTable TABLE(Name varchar(40), ModifyDate DateTime)INSERT INTO @myTable (Name, ModifyDate) VALUES ('Tom', '2017-02-01');INSERT INTO @myTable (Name, ModifyDate) VALUES ('Tom', '2017-02-01 08:23:42');INSERT INTO @myTable (Name, ModifyDate) VALUES ('Tom', '2017-02-01 14:04:02');INSERT INTO @myTable (Name, ModifyDate) VALUES ('Tom', '2017-02-03');INSERT INTO @myTable (Name, ModifyDate) VALUES ('Tom', '2017-02-03 22:32:43');
Ik ga een voorbeeld geven waar we een tabel gaan declareren, en in deze tabel gaan we data ophalen van 1 februari tot en met 3 februari. Als ik dit doe, zul je zien dat ik vijf rijen terug krijg.
Notice how there ‘ s times on these, right? Als ik geen tijd op een datum specificeer, komt het terug met een datum die om middernacht begint. Tot nu toe gaat het goed.
de grote vraag zou zijn dus wat gaat er dan gebeuren op een andere query hier, als ik terug te brengen “ModifyDate” tussen de 1st en de 3rd?
als ik dat in het Engels zeg, zou ik verwachten dat ze alle vijf terugkomen. Maar ik ga nu zeggen dat niet alle vijf terugkomen, want deze hier met de derde erop, als het wordt omgezet in de DateTime zal eigenlijk een tijd van middernacht hebben. Dus het gaat de vijfde rij laten vallen. Ik zal je laten zien wat ik bedoel.
SELECT Name, ModifyDateFROM @myTableWHERE ModifyDate BETWEEN '2017-02-01' AND '2017-02-03'ORDER BY ModifyDate
zoals je kunt zien, brengt het nu in principe slechts vier rijen terug omdat we in essentie op zoek zijn naar datums en tijden die tussen middernacht van de 1e en ruwweg middernacht van de 3e zijn.
een manier om dit te omzeilen is door de tijd net voor middernacht in te voeren. Dus gewoon om … Ik Ga naar de seconden hier. Als ik dit nu doe, zie je dat ik vijf rijen krijg, want het gaat naar “11:59:59” seconden.
SELECT Name, ModifyDateFROM @myTableWHERE ModifyDate BETWEEN '2017-02-01' AND '2017-02-03 23:59:59'ORDER BY ModifyDate
Ik tel niet de honderden seconden enzovoort. Om eerlijk te zijn, vind ik dat een beetje rommelig. Ik voel als je echt wilt gebruiken tussen met data in dit geval, en je wilde elke datum mogelijk met zijn tijd van de 3e te krijgen, de beste manier om dat te doen is gewoon om de 4e te gebruiken.
SELECT Name, ModifyDate
FROM @myTable
WHERE ModifyDate BETWEEN ‘2017-02-01’ AND ‘2017-02-04’
ORDER BY ModifyDate
in dit geval gebruikt tussen met DateTime niet noodzakelijkerwijs hetzelfde gedrag als we zouden denken dat het zou doen met gehele getallen, want hoewel het Inclusief is, gaat dit naar middernacht, dat is slechts die nanoseconde voorbij de 3e. Het ziet er gewoon grappig uit. Als ik dit doe, zul je zien dat het die datum van het laatste deel van de 3e haalt.
dus dat is een gotcha met tussen en DateTime. Dus ik weet dat veel mensen een soort van vermijden tussen met data en tijd, en ze zullen gewoon gebruiken groter dan en minder dan.
dus het roept de vraag op; waarom zou je tussen gebruiken?
Ik denk dat er twee redenen zijn waarom je ertussen wilt gebruiken. De eerste is leesbaarheid. De tweede is onderhoudbaarheid.
voor de leesbaarheid, wat ik bedoel is dat als ik moest zeggen dat we ” ModifyDate “groter is dan en gelijk aan de 1ste, en” ModifyDate ” is minder dan gelijk aan de 4de, in een zeer lange query kan dit moeilijk te lezen omdat het veel uitdrukkingen zijn om door te ontleden, en de Booleaanse logica kan in mijn weg komen. In die zin, tussen lijkt misschien een beetje meer natuurlijk om te lezen. Op het risico van misverstand wat het eigenlijk doet, zoals we hebben uitgelegd met DateTime.
ook, vanuit het oogpunt van onderhoudbaarheid, als ik naar binnen wil gaan en ik moet veranderen zoals “ModifyDate”, Weet ik dat ik hier kan komen en ik moet het op twee plaatsen veranderen. Ik zou het eerste deel van de term moeten veranderen en het tweede deel, hypothetisch. Als ik ertussen gebruik, hoef ik het maar op één plek te veranderen.
Als u mijn mening wilt weten of u tussen of groter dan of kleiner dan wilt gebruiken, gebruik ik persoonlijk groter dan of kleiner dan, omdat ik dan weet welke actie er daadwerkelijk wordt ondernomen. Ik heb het gevoel dat ik iets explicieter te zeggen heb over wat er aan de hand is, en dat geeft me een beter gevoel. Ik hoef me geen zorgen te maken over: “werkt dat echt? Neemt het de datum voor middernacht?”Al dat soort veronderstellingen gaat het raam uit. Ik werk graag waar er geen veronderstellingen zijn in computers, het maakt me gewoon gelukkiger. Ik gebruik er persoonlijk geen tussendoor. Maar als je het leuk vindt, denk ik dat het geweldig is om te gebruiken. Het wordt ondersteund in veel verschillende SQL dialecten, en ik zeg ga ervoor. Nogmaals bedankt, nog een fijne dag.