Страница 1 из 1

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

Добавлено: 04 авг 2006, 20:26
Stanislav
Есть таблица, в одном из столбцов тип данных - STRING, эта строка состоит из нескольких слов (1..5) Все слова UPPER CASE.
Необходимо средствами mySQL превратить эту строку в строку, где все буквы маленькие, а только первая буква каждого слова большая.
Во как...

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

Добавлено: 04 авг 2006, 20:44
Marmot
Stanislav писал(а):Есть таблица, в одном из столбцов тип данных - STRING, эта строка состоит из нескольких слов (1..5) Все слова UPPER CASE.
Необходимо средствами mySQL превратить эту строку в строку, где все буквы маленькие, а только первая буква каждого слова большая.
Во как...
Идём сюда
http://dev.mysql.com/doc/refman/5.0/en/ ... tions.html
и читаем, особенно коментарии, там кусочки того что надо есть

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

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

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

Добавлено: 04 авг 2006, 21:16
Marmot
Stanislav писал(а):Тут я уже был... Оно в общем понятно, что сделать можно, но только получится такая байда длинная - целая программа, а ведь это учебная задача. Две остальных задачи решились буквально в 2 строки...
Я вот и подумал, может что-то есть по этому поводу чтобы в 2 строки тоже?
В этом деле всяко бывает, мой самый большой select был 400 строчек.
Хотя для учебной задачи это по-моему перебор.

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

Добавлено: 05 авг 2006, 08:02
Stanislav
Marmot писал(а):...мой самый большой select был 400 строчек.
"Ну у вас и запросы!" - сказала База Данных и повисла... :lol:

SQL

Добавлено: 07 авг 2006, 21:01
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

Добавлено: 07 авг 2006, 21:58
bormo
Если бы слово было одно, то что-нибудь типа

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

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

substring_index

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

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