Usuário com melhor resposta
Select para trazer UF

Pergunta
-
Amigos,
Preciso criar um select em meu trabalho nas seguintes condições, tenho uma tabela onde possuo o numero de telefone dos clientes, com o DDD de cada cliente preciso montar um visão que me traga o Estado de cada um, ou seja, se for 21 me traga no select RJ, se for 11 me traga SP meio por ai.Pensei na função left e depois um IF, mas não funcionou.Alguem pode me ajusdar.
Respostas
-
Boa tarde!
Então seria assim, usando left(coluna,quantidade) para pegar os 2 primeiros digitos e usando o between para verificar se o valor está entre dois valores:
SELECT telefone ,uf=(CASE WHEN left(telefone,2) between 11 and 19 THEN 'SP' ELSE CASE WHEN left(telefone,2) between 21 and 23 THEN 'RJ' ELSE CASE WHEN left(telefone,2) between 41 and 45 THEN 'PR' END END END) from [tabela]
Espero ter lhe ajudado!! Se lhe ajudou, marque como resposta e ajude os outros usuários!
Obrigado!!Thiago Rogerio
www.thiagorogerio.com.br
thiagorogeriobr@hotmail.com- Marcado como Resposta Leandro_19 quarta-feira, 29 de fevereiro de 2012 14:10
Todas as Respostas
-
Boa tarde!!
Segue uma sugestão usando CASE WHEN END:
CREATE VIEW view_TelefoneEstado AS SELECT ddd,telefone, uf=(CASE WHEN ddd=11 THEN 'SP' ELSE CASE WHEN ddd=21 THEN 'RJ' ELSE CASE WHEN ddd=14 THEN 'SP' END END END) from [tabela]
**Dessa forma vai dar um trabalho grande, pois um estado tem vários DDD's....
Espero ter lhe ajudado!! Se lhe ajudou, marque como resposta! Obrigado!!Thiago Rogerio
www.thiagorogerio.com.br
thiagorogeriobr@hotmail.com- Sugerido como Resposta Marcelo Fernandes da SilvaMVP, Moderator terça-feira, 28 de fevereiro de 2012 17:05
-
Boa tarde!!
Segue outra sugestão.
1) Criar uma tabela que irá relacionar DDD x ESTADO:
CREATE TABLE [tabela_telefone_estado] ( ddd int not null ,estado char(2) not null )
2) Inserir os dados na tabela:
INSERT INTO [tabela_telefone_estado] VALUES (11,'SP') INSERT INTO [tabela_telefone_estado] VALUES (12,'SP') INSERT INTO [tabela_telefone_estado] VALUES (13,'SP') INSERT INTO [tabela_telefone_estado] VALUES (14,'SP') INSERT INTO [tabela_telefone_estado] VALUES (15,'SP') INSERT INTO [tabela_telefone_estado] VALUES (21,'RJ') INSERT INTO [tabela_telefone_estado] VALUES (41,'PR')
3) Agora o seu select fará um join com a tabela criada:
SELECT a.ddd,a.telefone ,b.estado from [tabela_de_telefones] a INNER JOIN [tabela_telefone_estado] b ON (a.ddd=b.ddd)
Espero ter lhe ajudado!! Se lhe ajudou, marque como resposta e ajude os outros usuários! Obrigado!!
Thiago Rogerio
www.thiagorogerio.com.br
thiagorogeriobr@hotmail.com- Sugerido como Resposta Marcelo Fernandes da SilvaMVP, Moderator terça-feira, 28 de fevereiro de 2012 17:05
-
-
Ok!!
**marque como resposta, para que o status dessa thread mude para respondido! Obrigado!Thiago Rogerio
www.thiagorogerio.com.br
thiagorogeriobr@hotmail.com -
Thiago no 1º caso, eu tenho um campo da tabela com os numeros no seguinte formato 2112345678, o exemplo que citou me refiro ao 1° retornou nulo.Pensei em, como são muitos DDD's, talvez em ler o primeiro digito e dizer o estado, um exemplo seria SP que a variação de ddd vai do 11 ate o 19, desta forma leria apenas o 1° numero o 11 dai já sei que é SP. Voce possui exemplos.
-
Boa tarde!
Então seria assim, usando left(coluna,quantidade) para pegar os 2 primeiros digitos e usando o between para verificar se o valor está entre dois valores:
SELECT telefone ,uf=(CASE WHEN left(telefone,2) between 11 and 19 THEN 'SP' ELSE CASE WHEN left(telefone,2) between 21 and 23 THEN 'RJ' ELSE CASE WHEN left(telefone,2) between 41 and 45 THEN 'PR' END END END) from [tabela]
Espero ter lhe ajudado!! Se lhe ajudou, marque como resposta e ajude os outros usuários!
Obrigado!!Thiago Rogerio
www.thiagorogerio.com.br
thiagorogeriobr@hotmail.com- Marcado como Resposta Leandro_19 quarta-feira, 29 de fevereiro de 2012 14:10
-
Thiago sua solução funcionou, só tenho agora duas duvidas.
1 - nos casos em que tenho apenas um codigo como brasilia que é 61 como fica a solução.
2 - nos casos em que o ddd de um outro estado esta entre a seleção, exemplo os estado do Amazonas possui os seguintes codigos 92 e 97 e o para 93 e 94, neste caso devo usar a clausula OR como ficaria? -
Bom dia
Você pose usar outros operadores do SQL, como: IN, =, etc... Segue exemplo:
SELECT telefone ,uf=(CASE WHEN left(telefone,2) between '11' and '19' THEN 'SP' ELSE CASE WHEN left(telefone,2) between '21' and '23' THEN 'RJ' ELSE CASE WHEN left(telefone,2) between '41' and '45' THEN 'PR' ELSE CASE WHEN left(telefone,2) = '61' THEN 'DF' ELSE CASE WHEN left(telefone,2) in ('92','97') THEN 'AM' ELSE CASE WHEN left(telefone,2) in ('93','94') THEN 'PA' END END END END END END) from [tabela]
Espero ter lhe ajudado!! Se lhe ajudou, marque como resposta e ajude os outros usuários!
Obrigado!!Thiago Rogerio
www.thiagorogerio.com.br
thiagorogeriobr@hotmail.com -
-
leandro, veja este link....
Gilberto Herminio Analista de Desenvolvimento de Sistemas Mogi das Cruzes-SP desenvolvedor.ti@r7.com / gil_haf@ig.com.br
-
Obrigado a todos, ja resolvi segue abaixo a resolução
USE SEU BD
GO
SELECT
CASE
WHEN LEFT(NUMERO_ACESSO,2) = '68' THEN 'AC'
WHEN LEFT(NUMERO_ACESSO,2) = '82' THEN 'AL'
WHEN LEFT(NUMERO_ACESSO,2) IN ('92','97') THEN 'AM'
WHEN LEFT(NUMERO_ACESSO,2) = '96' THEN 'AP'
WHEN LEFT(NUMERO_ACESSO,2) BETWEEN '71' AND '77' THEN 'BA'
WHEN LEFT(NUMERO_ACESSO,2) IN('85','88') THEN 'CE'
WHEN LEFT(NUMERO_ACESSO,2) = '61' THEN 'DF'
WHEN LEFT(NUMERO_ACESSO,2) BETWEEN '27' AND '28' THEN 'ES'
WHEN LEFT(NUMERO_ACESSO,2) BETWEEN '62' AND '64' THEN 'GO'
WHEN LEFT(NUMERO_ACESSO,2) BETWEEN '98' AND '99' THEN 'MA'
WHEN LEFT(NUMERO_ACESSO,2) BETWEEN '31' AND '38' THEN 'MG'
WHEN left(Numero_Acesso,2) = '67' THEN 'MS'
WHEN left(Numero_Acesso,2) BETWEEN 91 AND 94 THEN 'PA'
WHEN left(Numero_Acesso,2) BETWEEN 65 AND 66 THEN 'MT'
WHEN left(Numero_Acesso,2) = '83' THEN 'PB'
WHEN left(Numero_Acesso,2) IN('81','87') THEN 'CE'
WHEN left(Numero_Acesso,2) IN('86','89') THEN 'PI'
WHEN left(Numero_Acesso,2) BETWEEN 41 AND 46 THEN 'PR'
WHEN left(Numero_Acesso,2) BETWEEN 21 AND 24 THEN 'RJ'
WHEN left(Numero_Acesso,2) = '84' THEN 'RN'
WHEN left(Numero_Acesso,2) = '69' THEN 'RO'
WHEN left(Numero_Acesso,2) = '95' THEN 'RR'
WHEN left(Numero_Acesso,2) BETWEEN 51 AND 55 THEN 'RS'
WHEN left(Numero_Acesso,2) BETWEEN 47 AND 49 THEN 'SC'
WHEN left(Numero_Acesso,2) BETWEEN 11 AND 19 THEN 'SP'
WHEN left(Numero_Acesso,2) BETWEEN 51 AND 55 THEN 'RS'
WHEN left(Numero_Acesso,2) = '63' THEN 'TO'
ELSE 'OUTROS' END AS UF
FROM TABELA