SELECT US.EMAIL FROM USUARIO US
WHERE US.EMAIL IN ('ANAXYZ@vidalink.com.br') AND
US.EMAIL LIKE LENGTH(LOWER('%US.EMAIL%'))
Verificar se rgistro tem letra minuscula
-
- Rank: DBA Sênior
- Mensagens: 325
- Registrado em: Seg, 16 Nov 2009 4:50 pm
- Localização: São Paulo - SP
Existe alguma forma de verificar se em algum registro possui letra minuscula, exemplo:
Att.
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:
se você quer apenas converter para maiuscula use upper conforme foi falado.. se quer o inverso use lower
agora se quer realmente testar se e maiu ou minu.. não sei se tem uma funcao pronta para isso porem na mao isso seri o inicio
agora se quer realmente testar se e maiu ou minu.. não sei se tem uma funcao pronta para isso porem na mao isso seri o inicio
SELECT ASCII('A'),
ASCII('a')
FROM dual;
- fsitja
- Rank: OraSauro
- Mensagens: 611
- Registrado em: Seg, 19 Jan 2009 4:29 pm
- Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
O mais fácil é usar o lower mesmo, mas se você precisar extrair as minúsculas do texto, pode-se usar expressões regulares.
SQL> with t as (
2 select 'ABC' col from dual
3 union all select 'ABCD123' from dual
4 union all select 'Ab7' from dual
5 union all select 'x' from dual
6 union all select 'x888y' from dual
7 union all select 'zNzNz' from dual)
8 -- fim dos dados de exemplo
9 select col,
10 regexp_replace(col, '[^[:lower:]]') retorna_minusculas,
11 case when lower(col) = col then 'SIM' else 'NÃO' end tem_minusculas
12 from t;
COL RETORNA_MINUSCULAS TEM_MINUSCULAS
------- ------------------ --------------
ABC NÃO
ABCD123 NÃO
Ab7 b NÃO
x x SIM
x888y xy SIM
zNzNz zzz NÃO
6 rows selected
SQL>
-
- Rank: DBA Sênior
- Mensagens: 325
- Registrado em: Seg, 16 Nov 2009 4:50 pm
- Localização: São Paulo - SP
Obrigado pela ajuda de todos.
Na verdade estou em busca de inconsistência de dados, por exemplo, gostaria de pegar um registro onde no meio dele exista um caracter em minúsculo quando deveria ser todos em maiuculo, por isso tentei usar o like da seguinte maneira:
Por curiosidade o Oracle aceita o operador de comparação "<>" e "!=" ?
Att.
Na verdade estou em busca de inconsistência de dados, por exemplo, gostaria de pegar um registro onde no meio dele exista um caracter em minúsculo quando deveria ser todos em maiuculo, por isso tentei usar o like da seguinte maneira:
SELECT * FROM USUARIO
WHERE USUARIO.EMAIL LIKE ('%' || LOWER(USUARIO.EMAIL) || '%')
Att.
- fsitja
- Rank: OraSauro
- Mensagens: 611
- Registrado em: Seg, 19 Jan 2009 4:29 pm
- Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Desconsidera meu lapso mental por favor...
SQL> with t as (
2 select 'ABC' col from dual
3 union all select 'ABCD123' from dual
4 union all select 'Ab7' from dual
5 union all select 'x' from dual
6 union all select 'x888y' from dual
7 union all select 'zNzNz' from dual)
8 -- fim dos dados de exemplo
9 select col,
10 regexp_replace(col, '[^[:lower:]]') retorna_minusculas,
11 case when upper(col) = col then 'NÃO' else 'SIM' end tem_minusculas
12 from t;
COL RETORNA_MINUSCULAS TEM_MINUSCULAS
------- ------------------ --------------
ABC NÃO
ABCD123 NÃO
Ab7 b SIM
x x SIM
x888y xy SIM
zNzNz zzz SIM
6 rows selected
SQL>
- fsitja
- Rank: OraSauro
- Mensagens: 611
- Registrado em: Seg, 19 Jan 2009 4:29 pm
- Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Como que eu sei se ele "deveria ser todo em maiúsculo" ou não?
-
- Rank: DBA Sênior
- Mensagens: 325
- Registrado em: Seg, 16 Nov 2009 4:50 pm
- Localização: São Paulo - SP
Tentei fazer das duas formas:
Porém ambas me retornam resultados diferentes, sendo que a primeira retorna menos dados que a segunda e ainda me traz registros com valores em maiusculo.
Qual a diferença, é por causa do LIKE?
select us.email
from usuario us
where us.email != upper( us.email ) --AND
-- US.EMAIL NOT LIKE(UPPER('%' || US.EMAIL || '%'))
SELECT us.email
FROM USUARIO US
WHERE US.EMAIL LIKE ('%' || LOWER(US.EMAIL) || '%')
Qual a diferença, é por causa do LIKE?
- fsitja
- Rank: OraSauro
- Mensagens: 611
- Registrado em: Seg, 19 Jan 2009 4:29 pm
- Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Coloque lado a lado e você vai entender:
Se você quiser buscar palavras que tenham uma letra minúscula seguida imediatamente de uma letra maiúscula, vá por:
Você precisa de fato de distinção entre maiúsculas e minúsculas? Se não precisar o ideal era dar um UPDATE geral para maiúscula. Ou se você quer reforçar a consistência e impedir o usuário de inserir sujeira, crie uma check constraint com a expressão que funcionar no seu where, após corrigir todos os erros.
Como sugestão, pegue o que estiver inconsistente e dê um update jogando o campo todo para maiúsculas, depois faça a check constraint para garantir que nunca coloquem valores incorretos novamente.
select us.email, upper(us.email), lower(us.email)
from usuario us
-- etc
select us.email,
regexp_substr(us.email, '([[:lower:]][[:upper:]])') trecho_inconsistente
from usuario us
where regexp_like(us.email, '([[:lower:]][[:upper:]])');
Como sugestão, pegue o que estiver inconsistente e dê um update jogando o campo todo para maiúsculas, depois faça a check constraint para garantir que nunca coloquem valores incorretos novamente.
--corrige inconsistências
update usuario
set email = upper(email)
where regexp_like(email, '([[:lower:]][[:upper:]])');
-- garante consistência futura
alter table usuario add constraint ck_email check (regexp_substr(email, '([[:lower:]][[:upper:]])') is null);
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante