Тема: Перевод в другой регистр?

Здравствуйте, помогите пожалуйста с парой вопросов:

- Как можно перевести все первые буквы в верхний регистр? И как отсортировать только строки начинающиеся с заглавных/маленьких букв?

SELECT *  FROM `main` WHERE title like 'A%'     - так вылезают все(заглавные и не заглавные) вперемешку.


- Можно ли отсортировать только те строки, которые содержат исключительно латинские буквы?


- Как можно отсортировать строки с повторяющимися значениями?
(нужно почистить заголовки типа:   "Продать ведро, продаются ведра ведерные. Дешево.")

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

2

Re: Перевод в другой регистр?

nikola0077 сказал:

Как можно перевести все первые буквы в верхний регистр?

UPDATE `table` SET `field` = CONCAT(UPPER(LEFT(`field`, 1)), SUBSTRING(`field`, 2));
nikola0077 сказал:

И как отсортировать только строки начинающиеся с заглавных/маленьких букв?

SELECT *  FROM `main` WHERE ASCII(LEFT(`title`, 1)) = ASCII('A');
nikola0077 сказал:

Можно ли отсортировать только те строки, которые содержат исключительно латинские буквы?

SELECT * FROM `table` WHERE `field` REGEXP '[a-zA-Z]+';
nikola0077 сказал:

Как можно отсортировать строки с повторяющимися значениями?

Не понял, что здесь надо сортировать?

3 (изменено: nikola0077, 2008-01-08 08:29:09)

Re: Перевод в другой регистр?

- SELECT *  FROM `main` WHERE ASCII(LEFT(`title`, 1)) = ASCII('A');

А как применить это сразу ко всем русским буквам? Это работает только с латиницей?
кстати, есть еще один вариант: SELECT * FROM `main` WHERE `title` LIKE BINARY "a%"


- SELECT * FROM `table` WHERE `field` REGEXP '[a-zA-Z]+';   - это немного не то, нужно чтоб строка содержала только слова на английском языке и символы, а русских букв не содержала вообще.  тут "NOT" вроде не работает?

Hanut сказал:

Не понял, что здесь надо сортировать?

- Наверное написал ерунду. Хотелось найти такой алгоритм:

Например: Если строка содержит более 3 совпадений состоящих из 4 символов и больше, то это попадает под запрос.
(в данном случае это сочетание букв  "ведр" (из слова ведро).

Т.е. это могут быть любые другие предложения или набор символов, но удовлетворяющие этому условию.

4

Re: Перевод в другой регистр?

nikola0077 сказал:

- SELECT *  FROM `main` WHERE ASCII(LEFT(`title`, 1)) = ASCII('A');

А как применить это сразу ко всем русским буквам? Это работает только с латиницей?
кстати, есть еще один вариант: SELECT * FROM `main` WHERE `title` LIKE BINARY "a%"

Что значит "ко всем русским буквам"?
Ваш вариант более правилен, только при поиске в национальных кодировках, вроде cp1251, не забудьте выставить соответствующее сопоставление соединения на главной phpMyAdmin.
Вариант поиска по регулярному выражению, который, в ряде случаев, может быть полезен:
SELECT * FROM `main` WHERE `title` REGEXP BINARY '^a';

nikola0077 сказал:

SELECT * FROM `table` WHERE `field` REGEXP '[a-zA-Z]+';   - это немного не то, нужно чтоб строка содержала только слова на английском языке и символы, а русских букв не содержала вообще.  тут "NOT" вроде не работает?

Может так:
SELECT * FROM `table` WHERE `field` NOT REGEXP '[а-я]';

nikola0077 сказал:

Например: Если строка содержит более 3 совпадений состоящих из 4 символов и больше, то это попадает под запрос.
(в данном случае это сочетание букв  "ведр" (из слова ведро).

Нет, невозможно такое сделать с помощью SQL запроса.

5 (изменено: nikola0077, 2008-01-10 10:07:26)

Re: Перевод в другой регистр?

Hanut сказал:

не забудьте выставить соответствующее сопоставление соединения на главной phpMyAdmin.

Да, надо было поменять кодировку с cp1251_general_ci на cp1251_bin

Hanut сказал:

SELECT *  FROM `main` WHERE ASCII(LEFT(`title`, 1)) = ASCII('A');

А можно это сделать сразу со всеми не заглавными буквами [а-я]

Hanut сказал:

SELECT * FROM `table` WHERE `field` NOT REGEXP '[а-я]';

Спасибо, именно так.

Hanut сказал:

Нет, невозможно такое сделать с помощью SQL запроса.

Неужели нет такого оператора, который бы мог найти последовательность одинаковых(неизвестных) символов ? (...)

И самый последний вопрос: Как можно найти строки с определенным количеством текстовых символов?

SELECT *  FROM `main` WHERE title like '_______'  - это подходит только для известного числа символов.
А если надо "больше и равно" или "меньше и равно" ?

6

Re: Перевод в другой регистр?

nikola0077 сказал:

А можно это сделать сразу со всеми не заглавными буквами [а-я]

Для того я регулярное выражение и привел.
SELECT * FROM `main` WHERE `title` REGEXP BINARY '^[а-я]';

nikola0077 сказал:

Неужели нет такого оператора, который бы мог найти последовательность одинаковых(неизвестных) символов ?

Ни в PHP, ни в C, таких функций не знаю.

nikola0077 сказал:

Как можно найти строки с определенным количеством текстовых символов?

SELECT * FROM `main` WHERE CHAR_LENGTH(`title`) >= 10;