Как найти все строки в верхнем регистре в таблице MySQL?

Я изначально думал, что это тривиально. Затем подумал, что «двоичный» может это сделать. Я не уверен в этом.

Name
----
John
MARY
Kin
TED

Я хотел бы запросить только MARY и TED, которые написаны в верхнем регистре. Как мне это запросить?


person ThinkCode    schedule 23.08.2012    source источник


Ответы (6)


Если ваша сортировка нечувствительна к регистру, вам нужно использовать сравнение BINARY:

SELECT *
FROM yourtable
WHERE Name = BINARY UPPER(Name)

Посмотрите, как это работает онлайн: sqlfiddle

person Mark Byers    schedule 23.08.2012
comment
Двоичный код здесь ключевой! Благодарю вас! - person ThinkCode; 23.08.2012

Вы просто используете функцию UPPER() на поле Name и сравните результаты с исходным значением Name:

select Name from Table where Name = UPPER(Name)

Сюда

UPPER(Name)   ||  Name
---------------------------------------
JOHN          !=  John
MARY          ==  MARY
KIN           !=  Kin
TED           ==  TED

будут возвращены только те строки, которые вам нужны.

Как прокомментировал здесь @mdoyle, вы должны определить столбец с правильным сопоставлением (с учетом регистра), в противном случае, поскольку другие ответили, вам понадобится BINARY для сравнения столбцов без учета регистра.

person m_vitaly    schedule 23.08.2012
comment
Зависит от сортировки и типа данных. Если тип данных не двоичный, а сопоставление, например, latin1, сравнение строк будет нечувствительным к регистру. Поэтому я считаю, что ответ Марка Байерса на данный момент является наиболее точным. - person mdoyle; 23.08.2012
comment
В этом случае необходим двоичный код (по крайней мере, в моем случае). Все еще голосую за информацию. - person ThinkCode; 23.08.2012

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

select name from table where name=upper(name);
person kurast    schedule 23.08.2012
comment
Это работает только с двоичными типами данных или правильной сортировкой. - person Tom; 23.08.2012

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

SELECT Name
FROM   table
WHERE  Name COLLATE latin1_general_cs LIKE UPPER(Name)
;
person Tom    schedule 23.08.2012

Используйте ниже:

SELECT name FROM table WHERE name = BINARY UPPER(column_name);
person Kedar Acharekar    schedule 24.08.2012

Это также вернет числовые значения, но это не проблема для имени вашего столбца.

SELECT * FROM names WHERE 

ASCII(name) = ASCII(Upper(name))
person chrisboustead    schedule 23.08.2012
comment
Это работает только с двоичными типами данных или правильной сортировкой. - person Tom; 23.08.2012