neste vídeo, vamos ajudá-lo a usar o SQL entre o operador; vamos mostrar-lhe por que você gostaria de usar o entre o operador e como evitar armadilhas ao usá-lo com o tipo de DATETIME.
O operador between é equivalente ao uso E combinação de >= e <= operadores de comparação, mas a torna mais compacta gama de comparação. Uma vez que você tenha passado por este artigo, eu recomendaria assistir ao nosso próximo minuto SQL essencial para continuar a aprender mais sobre o servidor SQL!
Uma vez que você tenha visto o vídeo confira o código de amostra abaixo. Também incluí uma transcrição para usares.
este é um minuto SQL no intervalo do operador!Bem-vindo a outro minuto SQL essencial. Neste episódio, vamos aprender a usar o operador BETWEEN para comparar uma gama de valores em consultas SQL server.
o operador é usado para comparar uma gama de valores. Aqui está um exemplo em que estou a usá-lo para comparar uma gama de valores que são maiores ou iguais a 12, e menores ou iguais a 28. Quando eu uso o operador entre, é inclusivo.
irá incluir os números que estamos a comparar entre. A forma comum para usar Entre na cláusula onde é especificar o campo, então neste caso é “IsoNumericCode”, que é o campo. Então o entre operadores; estamos dizendo que queremos que o “código Isonumérico” seja entre e, em seguida, o intervalo. Então queremos que seja entre 12 e 28.
Você pode estar se perguntando o que isso teria a aparência igual à moda antiga e de forma maior e igual e inferior e igual. Isto é o que pareceria. Se fôssemos fazer a mesma coisa usando o maior e igual e inferior e igual a, teríamos onde IsoNumericCode >=12 E IsoNumericCode <= 28.
tudo bem, então vamos entrar para ver como isso se parece no servidor SQL. Tenho a nossa consulta no servidor SQL. Você pode ver aqui que nós vamos procurar o código Isonumérico entre 12 e 28, Ele está na mesma linha, é tipicamente como ele seria escrito.
SELECT CountryID ,CountryName ,IsoAlpha3Code FROM Application.Countries WHERE IsoNumericCode BETWEEN 12 and 28
deixe-me correr isso, e traga isto um pouco para cima aqui. Você pode ver que a gama de valores que voltam são de 12 a 28. Se eu aumentasse isto, digamos, para 100, esperava ver mais filas voltarem. Você pode ver que eles vão até 100.agora, quero avisá-lo que a ordem importa. Se o fiz entre os 100 e os 12, não terei resultados.
porque, se você pensar sobre isso, o que isso está dizendo É Que Eu quero que os códigos numéricos sejam entre … eu quero que seja maior ou igual a 100, e menos ou igual a 12. Não há nada entre isso. Então é uma culpa que nada volte. Então a ordem importa, e é importante que você a tenha para que usando o operador entre, o número mais baixo seja o primeiro. Muito bem, vamos voltar aos 12 e 28.
outra coisa que posso fazer é usar não operador com meio. Então, se eu disser “não entre 12 e 28” o que estou realmente dizendo É que vamos trazer de volta todas as linhas na tabela países que não têm um código numérico que é maior ou igual a 12, e menor ou igual a 28.
SELECT CountryID ,CountryName ,IsoAlpha3Code FROM Application.Countries WHERE IsoNumericCode NOT BETWEEN 12 and 28
assim, essencialmente, estas quatro linhas seriam esculpidas a partir desse resultado. Vamos fazer isto. Pode ver agora que estou a receber 186 filas.
If I just did the query outright without any restrictions on it, you’ll see that I get 190 rows back. Isto serve para vos mostrar que aquelas quatro fileiras estavam, de facto, a ser esculpidas. Na verdade, se você quiser fazer outro teste eu poderia apenas dizer ou código Isonumérico entre 12 e 28 e isso traria de volta tudo.
SELECT CountryID ,CountryName ,IsoAlpha3Code FROM Application.Countries WHERE IsoNumericCode NOT BETWEEN 12 and 28 OR IsoNumericCode BETWEEN 12 and 28
assim isto traz 190 linhas de volta. Realmente, isso é um pouco absurdo no sentido de que está trazendo de volta todas as linhas.
Todos os nossos exemplos até agora têm trabalhado com o inteiro. Mas entre trabalha com muitos outros tipos de dados. Nós também poderíamos usá-lo para tipos de dados de caráter (VARCHAR), e ele funcionaria da mesma forma, desde que tenhamos o conjunto de ordens de coleta, tudo funciona bem.
Um tipo de dados embora eu acho que você precisa ter cuidado é o tipo de dados “DateTime”.
porque no tipo de dados DateTime, você vai ver que há um componente de tempo na data, e se nós apenas fazer um entre usar apenas o dia e não a hora, a data e hora será padrão para a meia-noite. Não está a conseguir todos os resultados que tu pensas. Acho que a melhor maneira de fazer isto é mostrar-te o que quero dizer.
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');
i’m going to bring in an example where we’re going to declare a table, and in this table we’re going to pull in dates from February 1 through the 3rd. Quando eu fizer isto, vais ver que tenho cinco filas de volta.
Observe como há vezes em que estes, certo? Se eu não especificar uma hora em um encontro, ele volta com uma data a partir da meia-noite. Até agora, tudo bem.
A grande questão seria então o que vai acontecer então em outra consulta aqui, se eu trazer de volta “ModifyDate” entre o 1º e o 3º?se eu disser isso em inglês, espero que os cinco voltem. Mas eu vou dizer agora mesmo que nem todos os cinco vão voltar, porque este aqui que tem o terceiro nele, quando ele for convertido para o DateTime realmente terá um tempo de meia-noite. Então, vai cair a 5ª fila. Deixa – me mostrar-te o que quero dizer.
SELECT Name, ModifyDateFROM @myTableWHERE ModifyDate BETWEEN '2017-02-01' AND '2017-02-03'ORDER BY ModifyDate
como você pode ver, agora está basicamente trazendo de volta apenas quatro linhas porque estamos procurando em essência datas e horas que estão entre a meia-noite do 1º e aproximadamente meia-noite do 3º.
Uma maneira que você pode contornar esse é para colocar no tempo antes da meia-noite. Então, só para … vou sair para os segundos aqui. Então agora quando eu executar isso você vai ver que eu recebo cinco filas, porque vai para “11: 59: 59” segundos.
SELECT Name, ModifyDateFROM @myTableWHERE ModifyDate BETWEEN '2017-02-01' AND '2017-02-03 23:59:59'ORDER BY ModifyDate
não estou contando as centenas de segundos e assim por diante. Para ser honesto, acho que isso é um pouco confuso. Eu sinto que se você realmente quer usar entre datas neste caso, e você queria obter cada data possível com o seu tempo a partir do terceiro, a melhor maneira de fazer isso é apenas usar o quarto.
SELECT Nome, ModifyDate
a PARTIR @myTable
ONDE ModifyDate ENTRE ‘2017-02-01’ E ‘2017-02-04’
ORDER BY ModifyDate
neste caso, ENTRE com data / hora não está necessariamente a utilizar o mesmo comportamento como poderíamos pensar que seria com números inteiros, porque o que é inclusivo, isto está indo para ir para a meia-noite, que é exatamente o que nanossegundos passado o 3º. Parece engraçado. Quando eu fizer isto, vais ver que a data chega à última parte do dia 3.
assim que é um gotcha com entre e DateTime. Sei que muitas pessoas evitam entre datas e horas, e vão usar mais do que e menos do que isso.
então levanta a questão; por que você usaria entre?
eu acho que há duas razões pelas quais você gostaria de usar entre. A primeira é a legibilidade. A segunda é a manutenção.
Para facilitar a leitura, o que eu quero dizer é que se eu tivesse de dizer que somos “ModifyDate” é maior do que e igual a 1, e “ModifyDate” é menos do que igual a 4, em uma longa consulta este pode ficar de difícil leitura, porque é um monte de expressões para começar a analisar e a lógica Booleana pode ficar no meu caminho. Nesse sentido, entre Pode parecer um pouco mais natural de ler. Correndo o risco de não perceber o que está realmente a fazer, como explicámos com o DateTime.
também, de um ponto de vista de manutenção, Se eu quiser entrar e eu preciso mudar como “ModifyDate” para, eu sei que posso entrar aqui e eu tenho que mudá-lo em dois lugares. Teria de mudar a primeira parte do termo e a segunda parte, hipoteticamente. Onde se estiver a usar o meio, Só preciso de o mudar num sítio.
Se você gostaria de saber a minha opinião sobre se você usaria entre ou maior ou menor do que, eu pessoalmente uso maior ou menor do que, porque então eu sei que ação está realmente sendo tomada. Sinto que tenho uma palavra mais explícita sobre o que está a acontecer, e isso faz-me sentir melhor. Não tenho de me preocupar, ” está mesmo a funcionar? Vai levar o encontro antes da meia-noite?”Todo esse tipo de suposições sai pela janela. Gosto de trabalhar onde não há suposições em computadores, só me faz sentir mais feliz. Pessoalmente, não uso entre elas. Mas se gostares, acho óptimo usar. Ele é suportado em muitos dialetos SQL diferentes, e eu digo para ir para ele. Obrigado mais uma vez, tenha um bom dia.