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!

Foi útil?

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

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))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top