tässä videossa me opastaa sinua vaikka miten käyttää SQL välillä operaattori; näytämme, miksi haluat käyttää välillä operaattori ja miten välttää sudenkuopat, kun käytät sitä DATETIME tyyppi.
välinen operaattori vastaa >= ja <= vertailuoperaattorit, mutta tekee siitä kompaktimman etäisyysvertailun. Kun olet käynyt läpi tämän artikkelin, suosittelen katsomassa seuraava olennainen SQL minuutti jatkaa lisätietoja SQL Server!
katso videolta alla oleva otoskoodi. Otin mukaan myös transkriptin, jota voit käyttää.
tämä on SQL-minuutti operaattorien välissä!
Tervetuloa toiseen oleelliseen SQL-minuuttiin. Tässä jaksossa, aiomme oppia käyttämään välillä operaattori vertailla erilaisia arvoja SQL server kyselyt.
välistä operaattoria käytetään vertaamaan erilaisia arvoja. Tässä on esimerkki, jossa käytän sitä verrata erilaisia arvoja, jotka ovat suurempia tai yhtä suuri kuin 12, ja vähemmän tai yhtä suuri kuin 28. Kun käytän välillä operaattori, se on inclusive.
se sisältää numerot, joita vertaamme välillä. Yleinen muoto käyttää välillä missä lauseke on määrittää kentän, joten tässä tapauksessa se on ”IsoNumericCode”, että on kenttä. Sitten operaattoreiden välillä; sanomme, että haluamme ”Isonumerikoodin”olevan välillä ja sitten alueen. Haluamme sen olevan 12: n ja 28: n välillä.
saatat ihmetellä, miltä tämä näyttäisi vanhanaikaisella tavalla käyttämällä suurempia ja yhtä suuria ja pienempiä ja yhtä suuria kuin. Tältä se näyttäisi. Jos tekisimme saman käyttämällä suurempaa ja yhtä ja pienempää ja yhtä suurta, meillä olisi missä IsoNumericCode >=12 ja IsoNumericCode <= 28.
Alright, joten mennään katsomaan, miltä tämä näyttää SQL server-palvelussa. Kyselymme on ladattu SQL server-palveluun. Voitte nähdä, että aiomme etsiä Isonumerikoodia 12: n ja 28: n välillä, se on samalla viivalla, se on tyypillisesti, miten se kirjoitettaisiin.
SELECT CountryID ,CountryName ,IsoAlpha3Code FROM Application.Countries WHERE IsoNumericCode BETWEEN 12 and 28
anna minun ajaa tuo, ja tuo tätä vähän tänne. Voi nähdä, että palautuvien arvojen vaihteluväli on 12: sta 28: aan. Jos nostaisin tämän sanotaanko sataan, odottaisin, että rivejä tulee lisää. Voi nähdä, että ne menevät sataan asti.
nyt haluan varoittaa, että järjestyksellä on väliä. Jos tein 100-12, en saa tuloksia.
koska, jos ajattelet sitä, mitä tämä tarkoittaa, Haluan numeeristen koodien olevan välillä … haluan sen olevan suurempi tai yhtä suuri kuin 100 ja pienempi tai yhtä suuri kuin 12. Sen välissä ei ole mitään. On siis vika, ettei mitään tule takaisin. Joten järjestys on tärkeää, ja on tärkeää, että sinulla on se niin, että käyttämällä välillä operaattori, pienin numero on ensimmäinen. Palataan 12: een ja 28: aan.
toinen asia, jonka voin tehdä, on käyttää ei operaattoria välillä. Joten jos sanon ”ei 12: n ja 28: n välillä”, tarkoitan, että tuodaan takaisin jokainen rivi maataulukossa, jossa ei ole numerokoodia, joka on suurempi tai yhtä suuri kuin 12 ja pienempi tai yhtä suuri kuin 28.
SELECT CountryID ,CountryName ,IsoAlpha3Code FROM Application.Countries WHERE IsoNumericCode NOT BETWEEN 12 and 28
niin oleellisesti nämä neljä riviä olisi veistetty tuosta tuloksesta. Hoidetaan tämä. Nyt tulee 186 riviä.
Jos vain tein kyselyn suoraan ilman mitään rajoituksia, näet, että saan 190 riviä takaisin. Tämä siis osoittaa teille, että nuo neljä riviä oli todella veistetty pois. Itse asiassa, jos haluat tehdä toisen testin voisin vain sanoa tai IsoNumericCode välillä 12 ja 28 ja tämä toisi takaisin kaiken.
SELECT CountryID ,CountryName ,IsoAlpha3Code FROM Application.Countries WHERE IsoNumericCode NOT BETWEEN 12 and 28 OR IsoNumericCode BETWEEN 12 and 28
joten tämä tuo takaisin 190 riviä. Tämä on aika järjetöntä siinä mielessä, että se tuo kaikki rivit takaisin.
kaikki tähänastiset esimerkit ovat toimineet kokonaisluvun kanssa. Mutta välillä toimii monia muita tietotyyppi. Voisimme myös käyttää sitä merkin tietotyypit (VARCHAR), ja se toimisi samalla tavalla, kunhan meillä on vertailumääräykset asetettu, kaikki toimii hyvin.
yksi tietotyyppi on kuitenkin ”DateTime” tietotyyppi.
koska DateTime-tietotyypissä näet, että päivämäärässä on aikakomponentti, ja jos me vain teemme AIKAKOMPONENTIN käyttämällä vain päivää eikä aikaa, päivämäärä ja aika oletusarvona on keskiyö. Se ei todellakaan saa kaikkia tuloksia, joita luulisi. Paras tapa tehdä tämä on näyttää, mitä tarkoitan.
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');
aion tuoda esimerkin, jossa aiomme julistaa taulukon, ja tässä taulukossa aiomme vetää päivämäärät 1.helmikuuta kautta 3. Kun hoidan tämän, näet, että saan viisi riviä takaisin.
Notice how there ’ s times on these, right? Jos en määrittele treffien ajankohtaa, se tulee takaisin, kun Treffit alkavat keskiyöllä. Toistaiseksi kaikki hyvin.
iso kysymys olisi, joten mitä tapahtuu sitten toisella kyselyllä täällä, jos tuon takaisin ”Modifydaten” 1. ja 3. väliin?
Jos sanon, että englanniksi, odottaisin kaikkien näiden viiden tulevan takaisin. Mutta aion sanoa juuri nyt, että kaikki viisi eivät tule takaisin, koska tämä Tässä, joka on 3rd sitä, kun se muuttuu DateTime todella on aika keskiyöllä. Joten se pudottaa 5.rivin. Näytän, mitä tarkoitan.
SELECT Name, ModifyDateFROM @myTableWHERE ModifyDate BETWEEN '2017-02-01' AND '2017-02-03'ORDER BY ModifyDate
kuten näette, nyt se tuo periaatteessa takaisin vain neljä riviä, koska etsimme pohjimmiltaan päivämääriä ja aikoja, jotka ovat 1.päivän keskiyön ja noin 3. päivän keskiyön välillä.
yksi tapa, jolla tämän voi kiertää, on laittaa aikaan juuri ennen puoltayötä. Joten vain … menen ulos seconds täällä. Joten nyt kun ajan tämän näet, että saan viisi riviä, koska se menee ”11: 59: 59” sekuntia.
SELECT Name, ModifyDateFROM @myTableWHERE ModifyDate BETWEEN '2017-02-01' AND '2017-02-03 23:59:59'ORDER BY ModifyDate
en laske satoja sekunteja ja niin edelleen. Minusta se on aika sotkuista. Minusta tuntuu, jos todella haluat käyttää välillä päivämäärät tässä tapauksessa, ja halusit saada jokainen päivä mahdollista sen aikaa 3rd, paras tapa tehdä, että on vain käyttää 4.
valitse nimi, ModifyDate
FROM @myTable
WHERE ModifyDate BETWEEN ’2017-02-01’ AND ’2017-02-04’
ORDER BY ModifyDate
tässä tapauksessa, BETWEEN with DateTime ei välttämättä käytä samaa käyttäytymistä kuin luulisimme sen käyttävän kokonaislukuja, koska vaikka se on inclusive, Tämä menee keskiyöhön, joka on vain tuo nanosekunti ohi 3. Se vain näyttää hassulta. Kun ajan tätä, näet, että se vetää sen päivämäärän 3.ulkoa.
niin, että on gotcha välillä ja DateTime. Joten tiedän paljon ihmisiä tavallaan välttää välillä päivämäärät ja aika, ja he vain käyttää enemmän ja vähemmän kuin.
niin se herättää kysymyksen; miksi käyttäisit välillä?
mielestäni on kaksi syytä, miksi haluat käyttää välillä. Ensimmäinen on luettavuus. Toinen on ylläpidettävyys.
luettavuuden osalta tarkoitan, että jos minun pitäisi sanoa, että ”ModifyDate” on suurempi ja yhtä suuri kuin 1.ja ”ModifyDate” on pienempi kuin 4., hyvin pitkässä kyselyssä tämä voi olla vaikea lukea, koska se on paljon ilmaisuja alkaa jäsentää läpi, ja Boolen logiikka voi tulla tielleni. Siinä mielessä välillä saattaa tuntua hieman luontevammalta lukea. Vaarana on väärinkäsitys, mitä se todella tekee, kuten olemme selittäneet DateTime.
myös ylläpidettävyyden näkökulmasta, Jos haluan mennä sisään ja minun täytyy muuttaa kuten ”ModifyDate”, tiedän, että voin tulla tänne ja minun täytyy muuttaa sitä kahdessa paikassa. Minun pitäisi muuttaa termin ensimmäistä osaa ja toista osaa, hypoteettisesti. Jos olen vain käyttää välillä, minun tarvitsee vain vaihtaa se yhdessä paikassa.
If you ’ re like to know my take on what you would you would use BETWEEN or greater than or less than, I personally use greater than or less than, because then I know what action is actually being taken. Minusta tuntuu, että minulla on hieman selkeämpi sananvalta siihen, mitä tapahtuu, ja se helpottaa oloani. Ei tarvitse miettiä, Toimiiko se oikeasti. Onko Treffit ennen puoltayötä?”Kaikki sellainen oletus juttuja menee ulos ikkunasta. Tykkään työskennellä siellä, missä ei ole oletuksia tietokoneissa, se vain tekee minut onnellisemmaksi. Itse en käytä välillä. Mutta jos pidät siitä, minusta se on hieno käyttää. Se on tuettu monissa eri SQL murteissa, ja sanon go sitä. Kiitos vielä, hyvää päivänjatkoa.