Oracle - выберите, где поле содержит строчные буквы - PullRequest
16 голосов
/ 25 ноября 2008

У меня есть таблица users в базе данных Oracle 9.2.0.6. Два поля - это varchar - фамилия и имя.

Когда строки вставляются в эту таблицу, поля имени и фамилии должны быть в верхнем регистре, но каким-то образом некоторые значения в этих двух полях имеют смешанный регистр.

Я хочу выполнить запрос, который покажет мне все строки таблицы, в которых есть имя или фамилия с строчными буквами.

Я искал в сети и нашел REGEXP_LIKE, но это должно быть для более новых версий oracle - похоже, он не работает для меня.

Еще одна вещь, которую я пытался сделать, - перевести «abcde ... z» в «$$$$$ ... $», а затем найти «$» в моем поле, но должен ли быть лучший способ?

Заранее спасибо!

Ответы [ 6 ]

59 голосов
/ 25 ноября 2008

Как насчет этого:

select id, first, last from mytable
where first != upper(first) or last != upper(last);
1 голос
/ 25 ноября 2008

Я думаю, что SQL BQ и второй SQL Джастина будут работать, потому что в этом сценарии:

first_name        last_name
----------        ---------
bob               johnson
Bob               Johnson
BOB               JOHNSON

Я хочу, чтобы мой запрос возвратил первые 2 строки.

Я просто хочу убедиться, что это будет эффективный запрос - моя таблица содержит 500 миллионов строк.

Когда вы говорите upper (first_name)! = First_name, всегда ли «first_name» относится к текущей строке, на которую смотрит оракул? Сначала я боялся использовать этот метод, потому что боялся, что в итоге я присоединю эту таблицу к себе, но, как вы оба написали SQL, кажется, что проверка на равенство работает только построчно, что будет работать для меня.

0 голосов
/ 28 ноября 2017

Попробуйте это:

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
0 голосов
/ 28 августа 2016

Если вы ищете Oracle 10g или выше, вы можете использовать приведенный ниже пример. Учтите, что вам нужно выяснить строки, где любая буква в столбце строчная.

Column1
.......
MISS
miss
MiSS

В приведенном выше примере, если вам нужно найти значения miss и MiSS, вы можете использовать следующий запрос

SELECT * FROM YOU_TABLE WHERE REGEXP_LIKE(COLUMN1,'[a-z]');
0 голосов
/ 01 декабря 2014

для сервера SQL, где для параметра сортировки БД учитывается регистр, используйте следующее:

SELECT * FROM tbl_user WHERE LEFT(username,1) COLLATE Latin1_General_CS_AI <> UPPER(LEFT(username,1))
0 голосов
/ 31 июля 2012
 SELECT * 
 FROM mytable 
 WHERE FIRST_NAME IN (SELECT FIRST_NAME 
                      FROM MY_TABLE
                      MINUS 
                      SELECT UPPER(FIRST_NAME) 
                      FROM MY_TABLE )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...