SQL Server - Dúvida ao usar Select e AND em 4 Colunas

08/08/2018

0

Olá, preciso realizar um select onde numa tabela:
mes inicio | mes fim | ano inicio | ano fim

eu consiga puxar todas as colunas onde:
''ano fim'' seja a partir de 2018 com qualquer ''mes fim'' (registros vao até julho);
E
que ''ano inicio'' e ''mes inicio'' sejam qualquer mes/ano DESDE que nao 07 e 2018.

tentei:
SELECT * FROM Tabela
WHERE
ANOFIM >= ''2018''
AND
(MESINICIO < ''07'' AND ANOINICIO = ''2018'')

Mas não está certo, conseguem me ajudar?
Leonardo

Leonardo

Responder

Post mais votado

08/08/2018

Pelo enunciado, deve ser algo assim:
SELECT *
FROM Tabela 
WHERE ANOFIM >= '2018'
AND (MESINICIO <> '07' AND ANOINICIO <> '2018')

Mas se não for, responda os questionamentos do Luciano que ficará mais fácil obter ajuda.

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

08/08/2018

Luciano

Oi. Primeiramente, você está usando que tipos para os campos MES e ANO (fime einício)? Deveria usar numérico, pois comparação de strings é diferente em programação.

Podes mostrar a estrutura da tabela? E o resultado do SELECT (após usar campo numérico). Além disso, quais registros existem na tabela atualmente, pra saber o que o SELECT vai retornar?

Aguardo respostas. E espero poder ajudar mais se precisar. (Se só mundando o tipo de campo já resolver, ótimo.)
Responder

08/08/2018

Alex Lekao

Boa tarde!!!

Particularmente, eu não consegui entender muito bem a necessidade.

o que o Emerson disse, eh basicamente o script que vc precisa.

Abraco.
Responder

08/08/2018

Leonardo

Olá, Luciano

Oi. Primeiramente, você está usando que tipos para os campos MES e ANO (fime einício)?
Deveria usar numérico, pois comparação de strings é diferente em programação.
MESINICIO (T_MES(numeric(2,0)), NOT NULL)
MESFIM (T_MES(numeric(2,0)), NOT NULL)
ANOINICIO (T_ANO(numeric(4,0)), NOT NULL)
ANOFIM (T_ANO(numeric(4,0)), NOT NULL)

Podes mostrar a estrutura da tabela?
A pessoa que enviou a tabela, ao invés de usar um campo com mês/ano, o separou em dois! Então, ao invés de fazer simplesmente um between, not between ou algo do gênero, eu tenho que fazer o comparativo de 3 colunas.

ANO INICIO <= 2018 - OK
MES INICIO - QUALQUER MÊS DE QUALQUER ANO, EXCETO O MÊS 07 DO ANO INICIO 2018
ANO FIM - SOMENTE A PARTIR DE 2018

é basicamente essa lógica de comparação que preciso acertar.

E o resultado do SELECT (após usar campo numérico). Além disso, quais registros existem na tabela atualmente, pra saber o que o SELECT vai retornar?
Responder

08/08/2018

Leonardo

A pessoa que enviou a tabela, ao invés de usar um campo com mês/ano, o separou em dois! Então, ao invés de fazer simplesmente um between, not between ou algo do gênero, eu tenho que fazer o comparativo de 3 colunas.

ANO INICIO <= 2018 - OK
MES INICIO - QUALQUER MÊS DE QUALQUER ANO, EXCETO O MÊS 07 DO ANO INICIO 2018
ANO FIM - SOMENTE A PARTIR DE 2018

é basicamente essa lógica de comparação que preciso acertar.

E o resultado do SELECT (após usar campo numérico). Além disso, quais registros existem na tabela atualmente, pra saber o que o SELECT vai retornar?
Responder

08/08/2018

Leonardo

é possivel usar o IF nesse caso?<br />
<br />
Por exemplo: SELECIONAR * FROM tabelaEX<br />
WHERE<br />
col1 = ''exemplo'' <br />
AND<br />
ANOFIM>= ''2018''<br />
AND<br />
(IF ANO INICIO = ''2018'', filtrar MES_INICIO < ''7'') -> no caso, se na linha tiver a coluna ANO_INICIO preenchido com 2018, quero q ele analise a coluna MES_INICIO para filtrar todas as linhas onde existam ''7'' pra cima.<br />
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar