În acest videoclip vă vom arăta cum să utilizați SQL între operator; vă vom arăta de ce doriți să utilizați între operator și cum să evitați capcanele atunci când îl utilizați cu tipul DATETIME.
între operatorul este echivalent cu utilizarea și combinație de>= și<= operatorii de comparație, dar face pentru o comparație gama mai compact. După ce ați trecut prin acest articol, aș recomanda vizionarea următorul nostru esențial SQL Minute pentru a continua aflați mai multe despre SQL Server!
după ce ați vizionat videoclipul, consultați codul de probă de mai jos. Am inclus, de asemenea, o transcriere pentru tine de a utiliza.
acesta este un minut SQL pe între operatorul!
Bine ați venit la un alt minut esențial SQL. În acest episod, vom învăța cum să folosim operatorul între pentru a compara o gamă de valori în interogările SQL server.
operatorul între este utilizat pentru a compara un interval de valori. Iată un exemplu în care îl folosesc pentru a compara o gamă de valori care sunt mai mari sau egale cu 12 și mai mici sau egale cu 28. Când folosesc operatorul între, este inclusiv.
acesta va include numerele pe care le comparăm între de. Forma comună pentru utilizarea între în clauza WHERE este de a specifica câmpul, deci în acest caz este „IsoNumericCode”, acesta este câmpul. Apoi între operatori; spunem că vrem ca „IsoNumericCode” să fie între și apoi intervalul. Așa că vrem să fie între 12 și 28.
s-ar putea să vă întrebați cum ar arăta acest lucru în mod vechi folosind mai mare și egal cu și mai mic și egal cu. Așa ar arăta. Dacă ar fi să facem același lucru folosind mai mare și egal cu și mai mic și egal cu, am avea unde IsoNumericCode >=12 și IsoNumericCode <= 28.
bine, deci să mergem să vedem cum arată acest lucru în SQL server. Am interogarea noastră încărcate în SQL server. Puteți vedea aici că vom căuta codul IsoNumericCode între 12 și 28, este pe aceeași linie, este de obicei cum ar fi scris.
SELECT CountryID ,CountryName ,IsoAlpha3Code FROM Application.Countries WHERE IsoNumericCode BETWEEN 12 and 28
Lasă-mă să rulez asta și să aduc puțin aici. Puteți vedea că intervalul de valori care revin sunt de la 12 la 28. Dacă ar fi să măresc acest lucru să spunem la 100, m-aș aștepta să văd mai multe rânduri revenind. Puteți vedea că merg până la 100.acum, vreau să vă avertizez că ordinea contează. Dacă am făcut între 100 și 12, Nu voi obține rezultate.
pentru că, dacă te gândești la asta, ceea ce spune asta este că vreau ca codurile numerice să fie între … vreau să fie mai mare sau egal cu 100 și mai mic sau egal cu 12. Nu e nimic între asta. Deci, este un defect nimic nu se întoarce. Deci, ordinea contează și este important să o aveți, astfel încât folosind operatorul între, cel mai mic număr este primul. Bine, să ne întoarcem la 12 și 28.
Un alt lucru pe care îl pot face este să nu folosesc operatorul cu între. Deci, dacă spun „Nu între 12 și 28”, ceea ce spun cu adevărat este să aducem înapoi fiecare rând din tabelul țărilor care nu are un cod numeric mai mare sau egal cu 12 și mai mic sau egal cu 28.
SELECT CountryID ,CountryName ,IsoAlpha3Code FROM Application.Countries WHERE IsoNumericCode NOT BETWEEN 12 and 28
deci, în esență, aceste patru rânduri ar fi sculptate din acel rezultat. Să rulăm asta. Puteți vedea acum primesc 186 de rânduri.
dacă tocmai am făcut interogarea fără restricții, veți vedea că primesc 190 de rânduri înapoi. Deci, acest lucru servește pentru a vă arăta că aceste patru rânduri au fost într-adevăr sculptate. De fapt, dacă doriți să faceți un alt test aș putea spune doar sau IsoNumericCode între 12 și 28 și acest lucru ar aduce înapoi totul.
SELECT CountryID ,CountryName ,IsoAlpha3Code FROM Application.Countries WHERE IsoNumericCode NOT BETWEEN 12 and 28 OR IsoNumericCode BETWEEN 12 and 28
deci, aceasta aduce înapoi 190 de rânduri. Într-adevăr, acest lucru este un fel de lipsit de sens, în sensul că aduce înapoi toate rândurile.
toate exemplele noastre de până acum au lucrat cu întregul. Dar între lucrări cu multe alte tipuri de date. De asemenea, l-am putea folosi pentru tipurile de date de caractere (VARCHAR) și ar funcționa la fel, atâta timp cât avem ordinele de colaționare setate, totul funcționează bine.
un tip de date, deși cred că trebuie să fii atent, este tipul de date „DateTime”.
deoarece în tipul de date DateTime, veți vedea că există o componentă de timp în data, și dacă facem doar o între folosind doar ziua și nu Ora, data și ora va implicit la miezul nopții. Chiar nu obține toate rezultatele pe care crezi că le-ar obține. Cred că cel mai bun mod de a face acest lucru este să vă arăt ce vreau să spun.
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');
am de gând să aducă într-un exemplu în cazul în care vom declara un tabel, și în acest tabel vom trage în datele din februarie 1st prin 3rd. Când voi rula asta, vei vedea că primesc cinci rânduri înapoi.
observați cum există ori pe acestea, nu? Dacă nu specific o oră la o dată, se întoarce cu o dată care începe la miezul nopții. Până acum, totul e bine.
marea întrebare ar fi deci ce se va întâmpla apoi pe o altă interogare aici, dacă aduc înapoi „ModifyDate” între 1 și 3?
dacă aș spune asta în Engleză, m-aș aștepta ca toate cele cinci să se întoarcă. Dar am de gând să spun chiar acum că nu toate cele cinci sunt de gând să se întoarcă, pentru că acesta chiar aici, care are 3 pe ea, atunci când acesta devine convertit la DateTime va avea de fapt un timp de miezul nopții. Așa că va renunța la al 5-lea rând. Lasă-mă să-ți arăt ce vreau să spun aici.
SELECT Name, ModifyDateFROM @myTableWHERE ModifyDate BETWEEN '2017-02-01' AND '2017-02-03'ORDER BY ModifyDate
după cum puteți vedea, acum, practic, aduce înapoi doar patru rânduri, deoarece căutăm în esență date și ore care sunt între miezul nopții de 1 și aproximativ miezul nopții de 3.
o modalitate prin care puteți lucra în jurul valorii de acest lucru este de a pune în timp chiar înainte de miezul nopții. Deci, doar pentru a … voi merge la secunde aici. Deci, acum, când voi rula acest lucru veți vedea că am cinci rânduri pentru că se va „11:59:59” secunde.
SELECT Name, ModifyDateFROM @myTableWHERE ModifyDate BETWEEN '2017-02-01' AND '2017-02-03 23:59:59'ORDER BY ModifyDate
Nu Număr sutele de secunde și așa mai departe. Sincer să fiu, simt că e cam dezordonat. Mă simt dacă doriți cu adevărat să utilizați între cu datele în acest caz, și ai vrut să obțineți fiecare dată posibilă cu timpul său de la 3, cel mai bun mod de a face acest lucru este doar de a utiliza 4.
selectați numele, ModifyDate
din @myTable
unde ModifyDate între ‘2017-02-01’ și ‘2017-02-04’
ordinea După ModifyDate
în acest caz, între cu DateTime nu este neapărat folosind același comportament ca ne-ar crede că ar fi cu numere întregi, pentru că, deși este inclusiv, acest lucru se va merge la miezul nopții, care este doar că nanosecunde trecut de 3. Arată doar amuzant. Când am rula acest lucru, veți vedea că nu trage în acea dată din a doua parte a 3-a.
deci, care este un gotcha cu între și DateTime. Deci, știu o mulțime de oameni un fel de a evita între cu datele și ora, și ei vor folosi doar mai mare și mai puțin decât.
deci, se pune întrebarea; De ce ai folosi între?
cred că există două motive pentru care ați dori să utilizați între. Primul este lizibilitatea. Al doilea este mentenabilitatea.
pentru lizibilitate, ceea ce vreau să spun este că dacă ar trebui să spun că suntem „ModifyDate” este mai mare și egal cu 1, iar „ModifyDate” este mai mic decât egal cu 4, într-o interogare foarte lungă acest lucru poate deveni greu de citit, deoarece sunt multe expresii de analizat, iar logica booleană poate să-mi stea în cale. În acest sens, între ar putea părea un pic mai natural pentru a citi. Cu riscul de a înțelege greșit ceea ce face de fapt, așa cum am explicat cu DateTime.
De asemenea, din punct de vedere al mentenabilității, dacă vreau să intru și trebuie să schimb ca „ModifyDate” la, știu că pot veni aici și trebuie să o schimb în două locuri. Ar trebui să schimb prima parte a termenului și a doua parte, ipotetic. În cazul în care, dacă eu sunt doar folosind între, Am nevoie doar schimba într-un singur loc.
Dacă doriți să știți părerea mea dacă ați folosi între sau mai mult sau mai puțin decât, eu personal folosesc mai mult sau mai puțin decât, pentru că atunci știu ce acțiune este de fapt luată. Simt că am un pic mai explicit spune în ceea ce se întâmplă, și că mă face să mă simt mai bine. Nu trebuie să-mi fac griji, ” chiar funcționează? Este de a lua Data înainte de miezul nopții?”Tot felul de presupuneri ies pe fereastră. Îmi place să lucrez acolo unde nu există presupuneri în computere, doar mă face să mă simt mai fericit. Eu personal nu folosesc între. Dar dacă vă place, cred că este minunat de utilizat. Este susținută în multe dialecte SQL diferite, și eu spun du-te pentru ea. Mulțumesc din nou, o zi bună.