A Oracle - Select onde o campo tem caracteres minúsculos
-
11-07-2019 - |
Pergunta
Eu tenho uma tabela, usuários, em uma 9.2.0.6 banco de dados Oracle. Dois dos campos são varchar - ultimo_nome e primeiro_nome
.Quando linhas são inseridas para esta tabela, os campos de primeiro nome e sobrenome é suposto ser em todas as letras maiúsculas, mas de alguma forma alguns valores nestes dois campos são maiúsculas e minúsculas.
Eu quero executar uma consulta que vai me mostrar todas as linhas na tabela que tem nomes ou apelidos com caracteres minúsculos nele.
Eu procurei na net e encontrei REGEXP_LIKE, mas isso deve ser para as versões mais recentes do oráculo -. Não parece trabalhar para mim
Outra coisa que eu tentei foi traduzir "abcde ... z" para "$$$$$ ... $" e, em seguida, procurar um '$' no meu campo, mas tem que haver uma maneira melhor?
Agradecemos antecipadamente!
Solução
Como sobre isto:
select id, first, last from mytable
where first != upper(first) or last != upper(last);
Outras dicas
Eu acho SQL da BQ e segunda SQL de Justin vai funcionar, porque neste cenário:
first_name last_name
---------- ---------
bob johnson
Bob Johnson
BOB JOHNSON
Eu quero a minha consulta para retornar os primeiros 2 linhas.
Eu só quero ter certeza de que esta será uma consulta eficiente embora -. Minha mesa tem 500 milhões de linhas em que
Quando você diz superior (first_name)! = First_name, é "first_name" sempre pertencente à linha atual que a Oracle está olhando? Eu tinha medo de usar esse método no início porque eu estava receoso que eu iria acabar por aderir a esta mesa para si, mas eles maneira que você tanto escreveu o SQL parece que a verificação de igualdade só está operando em uma base linha por linha, que iria trabalhar para mim.
Se você está procurando Oracle 10g ou superior você pode usar o exemplo abaixo. Considere que você precisa descobrir as linhas onde a qualquer da carta em uma coluna é minúscula.
Column1
.......
MISS
miss
MiSS
No exemplo acima, se você precisa encontrar o miss
valores e MiSS
, então você pode usar o abaixo consulta ??p>
SELECT * FROM YOU_TABLE WHERE REGEXP_LIKE(COLUMN1,'[a-z]');
SELECT *
FROM mytable
WHERE FIRST_NAME IN (SELECT FIRST_NAME
FROM MY_TABLE
MINUS
SELECT UPPER(FIRST_NAME)
FROM MY_TABLE )
Tente isto:
SELECT * FROM YOU_TABLE WHERE REGEXP_LIKE(COLUMN1,'[a-z]','c'); => Miss, miss lower text
SELECT * FROM YOU_TABLE WHERE REGEXP_LIKE(COLUMN1,'[A-Z]','c'); => Miss, MISS upper text
para o servidor SQL onde a configuração de agrupamento DB é caso de uso insensível o seguinte:
SELECT * FROM tbl_user WHERE LEFT(username,1) COLLATE Latin1_General_CS_AI <> UPPER(LEFT(username,1))