Вопрос к крутым SQL-никам

Все, что вы хотели знать о программизме, но боялись спросить.
Ответить
Аватара пользователя
Stanislav
Mr. Minority Report
Сообщения: 45211
Зарегистрирован: 19 окт 2005, 16:33
Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo

Вопрос к крутым SQL-никам

Сообщение Stanislav »

Есть таблица, в одном из столбцов тип данных - STRING, эта строка состоит из нескольких слов (1..5) Все слова UPPER CASE.
Необходимо средствами mySQL превратить эту строку в строку, где все буквы маленькие, а только первая буква каждого слова большая.
Во как...
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Re: Вопрос к крутым SQL-никам

Сообщение Marmot »

Stanislav писал(а):Есть таблица, в одном из столбцов тип данных - STRING, эта строка состоит из нескольких слов (1..5) Все слова UPPER CASE.
Необходимо средствами mySQL превратить эту строку в строку, где все буквы маленькие, а только первая буква каждого слова большая.
Во как...
Идём сюда
http://dev.mysql.com/doc/refman/5.0/en/ ... tions.html
и читаем, особенно коментарии, там кусочки того что надо есть
Аватара пользователя
Stanislav
Mr. Minority Report
Сообщения: 45211
Зарегистрирован: 19 окт 2005, 16:33
Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo

Re: Вопрос к крутым SQL-никам

Сообщение Stanislav »

Marmot писал(а):
Stanislav писал(а):Есть таблица, в одном из столбцов тип данных - STRING, эта строка состоит из нескольких слов (1..5) Все слова UPPER CASE.
Необходимо средствами mySQL превратить эту строку в строку, где все буквы маленькие, а только первая буква каждого слова большая.
Во как...
Идём сюда
http://dev.mysql.com/doc/refman/5.0/en/ ... tions.html
и читаем, особенно коментарии, там кусочки того что надо есть
Тут я уже был... Оно в общем понятно, что сделать можно, но только получится такая байда длинная - целая программа, а ведь это учебная задача. Две остальных задачи решились буквально в 2 строки...
Я вот и подумал, может что-то есть по этому поводу чтобы в 2 строки тоже?
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Re: Вопрос к крутым SQL-никам

Сообщение Marmot »

Stanislav писал(а):Тут я уже был... Оно в общем понятно, что сделать можно, но только получится такая байда длинная - целая программа, а ведь это учебная задача. Две остальных задачи решились буквально в 2 строки...
Я вот и подумал, может что-то есть по этому поводу чтобы в 2 строки тоже?
В этом деле всяко бывает, мой самый большой select был 400 строчек.
Хотя для учебной задачи это по-моему перебор.
Аватара пользователя
Stanislav
Mr. Minority Report
Сообщения: 45211
Зарегистрирован: 19 окт 2005, 16:33
Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo

Re: Вопрос к крутым SQL-никам

Сообщение Stanislav »

Marmot писал(а):...мой самый большой select был 400 строчек.
"Ну у вас и запросы!" - сказала База Данных и повисла... :lol:
Yuri Dimant
Пользователь
Сообщения: 107
Зарегистрирован: 02 авг 2004, 22:00

SQL

Сообщение Yuri Dimant »

Stanislav

I did something but in SQL Server. I hope it will give an idea how to convert it to MySQL

CREATE FUNCTION dbo.fn_capitalize
(
@str AS nvarchar(100)
)
RETURNS nvarchar(100)
AS
BEGIN

DECLARE
@ret_str AS varchar(100),
@pos AS int,
@len AS int

SELECT
@ret_str = N' ' + LOWER(@str),
@pos = 1,
@len = LEN(@str) + 1

WHILE @pos > 0 AND @pos < @len
BEGIN
SET @ret_str = STUFF(@ret_str,
@pos + 1,
1,
UPPER(SUBSTRING(@ret_str,@pos + 1, 1)))
SET @pos = CHARINDEX(N' ', @ret_str, @pos + 1)
END

RETURN RIGHT(@ret_str, @len - 1)

END

------
SELECT dbo.fn_capitalize('TOWN OF BAR HARBOR')

DROP FUNCTION dbo.fn_capitalize
bormo
Пользователь
Сообщения: 194
Зарегистрирован: 19 май 2006, 21:03
Откуда: + 1 604

Сообщение bormo »

Если бы слово было одно, то что-нибудь типа

Код: Выделить всё

concat (
            upper (  
                        substr (field, 1, 1)
                      ), 
            lower (
                        substr (field from 2)
                      )
            )
 
или без первого upper, если все в верхнем. Задачка - как распарсить строку. Если бы все время было 5, то решалось бы при помощи

substring_index

Хотя и так можно попробовать, если вставить его в запрос заведомо максимальное число раз.

Хотя дружеский совет - нормализация.
Ответить