Перевести первые буквы слов с верхний регистр
В таблице перевести все имена в верхний регистр
Имеем базу MS SQL 2012, Имеем таблицу справочник имен. Благодаря очень опытным операторам имена.
Верхний регистр
для преобразования в верхний регистр используется upper, верно? но вот тут жалуется на него .
Перевести первые буквы слов в верхний регистр
Помогите как это сделать ? Желательно работа с файлом, то есть что ты предложение брало из файла.
Работа с файлом. Перевести первые буквы слов в верхний регистр
Есть программа, которая берёт написанный текст и меняет все первые буквы слов на верхний регистр.
311 / 271 / 118
Регистрация: 05.06.2013
Сообщений: 868
1 2 3 4 5 6 7
DECLARE @Name VARCHAR(20) SET @Name = 'иванов иван иванович' SELECT UPPER(SUBSTRING(parsename(REPLACE(@Name, ' ', '.'), 3), 1, 1))+SUBSTRING(parsename(REPLACE(@Name, ' ', '.'), 3), 2, 100)+' '+ UPPER(SUBSTRING(parsename(REPLACE(@Name, ' ', '.'), 2), 1, 1))+SUBSTRING(parsename(REPLACE(@Name, ' ', '.'), 2), 2, 100)+' '+ UPPER(SUBSTRING(parsename(REPLACE(@Name, ' ', '.'), 1), 1, 1))+SUBSTRING(parsename(REPLACE(@Name, ' ', '.'), 1), 2, 100);
Регистрация: 19.11.2014
Сообщений: 24
Jefe, Огромное спасибо)
а может еще подскажете, как сделать так, что бы не зависело от количества пробелов между словами?
311 / 271 / 118
Регистрация: 05.06.2013
Сообщений: 868
Сообщение от Кэти
Форум пользователей MySQL
Добрый день! У меня вопрос :существует ли sql запрос для того что бы изменить регистр первой буквы в столбике на заглавную?
Если у кого есть подобный опыт пожалуйста подскажите для латинских букв и для русских! Спасибо!
#2 31.01.2012 15:04:28
vasya Архат Откуда: Орел Зарегистрирован: 07.03.2007 Сообщений: 5817
Re: Изменить регистр первой буквы на заглавную в столбце
update `таблица` set `столбец`= concat ( upper ( left ( `столбец`, 1 ) ) ,substr ( `столбец`, 2 ) ) ;
#3 31.01.2012 15:25:43
viktor30 Завсегдатай Зарегистрирован: 30.01.2012 Сообщений: 27
Re: Изменить регистр первой буквы на заглавную в столбце
vasya написал:
update `таблица` set `столбец`= concat ( upper ( left ( `столбец`, 1 ) ) ,substr ( `столбец`, 2 ) ) ;
Спасибо большое ! А еще посоветуйте такой вопрос : как убрать пробел — он как первый знак (2838, ‘ diamonds diamond’),
что бы потом поменять регистр первой буквы
#4 31.01.2012 15:31:08
vasya Архат Откуда: Орел Зарегистрирован: 07.03.2007 Сообщений: 5817
Re: Изменить регистр первой буквы на заглавную в столбце
А документацию по ссылке из идеологических или религиозных соображений не смотрите?
#5 31.01.2012 15:34:16
viktor30 Завсегдатай Зарегистрирован: 30.01.2012 Сообщений: 27
Re: Изменить регистр первой буквы на заглавную в столбце
vasya написал:
А документацию по ссылке из идеологических или религиозных соображений не смотрите?
Все сделал! Спасибо за советы! Уже второй раз нахожу помощь на этом форуме! Спасибо громадное!
[PostgreSQL] Первую букву сделать заглавной
Задача: в полях ‘name’ таблицы ‘comment’ первый символ перевести в верхний регистр.
Решение:
UPDATE comment SET name = UPPER(SUBSTRING(name FROM 1 FOR 1)) || SUBSTRING(name FROM 2 FOR LENGTH(name))
UPDATE comment SET name = upper(substring(name from 1 for 1)) || substring(name from 2 for length(name))
SQL-Ex blog
Как перевести первую букву каждого слова предложения в верхний регистр?
Добавил smois on Суббота, 13 апреля. 2019
Эта задача возникла как осмысленный пример для демонстрации использования скалярных функций, табличных переменных и новых возможностей языка T-SQL. Итак, требуется создать функцию, которая будет делать первую букву каждого слова заглавной, а остальные — строчными.
- Слова разделяются единичными пробелами.
- Количество слов произвольно.
- Разбиваем фразу на отдельные слова, которые помещаем в табличную переменную.
- Делаем первую букву каждого слова прописной.
- Собираем строку из слов, соблюдая порядок, с помощью функции STRING_AGG.
create or alter function firstBigLetter(@name varchar(max))
returns varchar(max)
as
begin
declare @i int = 1, @next int = 1;
declare @t table(id int identity primary key, word varchar(100))
-- Пока подумаем, зачем нам identity?
while @next > 0
begin
select @next=charindex(' ', @name, @i);
if @next=0 -- больше пробелов нет, берем последнее слово
insert into @t(word) select substring(@name, @i, len(@name))
else -- берем очередное слово между @i и @next
insert into @t(word) select substring(@name, @i, @next-@i)
set @i=@next + 1; -- начало следующего слова
end
--Выполняем требуемое преобразование слов
update @t set word= upper(left(word, 1)) + lower(substring(word, 2, len(word)))
-- Сборка и возврат
return(select string_agg(word, ' ')
WITHIN GROUP (ORDER BY id) -- вот зачем нам Identity!
from @t)
end;
go
-- Вызов
select dbo.firstBigLetter('еСли кто-то кое-ГДе у наС порой');
--Результат
Если Кто-то Кое-где У Нас Порой
Пояснения.
- Конструкция CREATE OR ALTER FUNCTION появилась в SQL Server 2017 как аналог CREATE OR REPLACE FUNCTION в PostgreSQL. Теперь не нужно напрягать память, чтобы не забыть поменять ALTER на CREATE после отладки.
- Столбец Identity задает нам порядок, в котором следуют слова в предложении. Поэтому при сборке мы используем сортировку именно по этому столбцу — WITHIN GROUP (ORDER BY id).
- Естественно, можно было не выполнять разбивку на слова, а, например, использовать рекурсивный запрос, но я преследовал тут вполне определенные учебные цели. Если кто-то решит оценить производительность различных алгоритмов, можете поделиться результатами в комментариях.
Функция STRING_AGG, которая использовалась при сборке предложения, имеет обратную функцию STRING_SPLIT (обе эти функции появились в SQL Server 2017), которая как раз выполняет разбивку символьной строки, формируя одностолбцовую таблицу. Использование этой функции напрашивается для решения нашей задачи. Однако, согласно документации, она не гарантирует порядка. В моих примерах строка восстанавливалась правильно, поэтому я приведу и это решение в качестве примера использования функции. Но если вы решите применять её, то делайте это на свой страх и риск.
create or alter function firstBigLetterWithoutOrder(@name varchar(max))
returns varchar(max)
as
begin
return(select string_agg(upper(left(value,1))+lower(substring(value,2,len(value))),' ') from
(select value from STRING_SPLIT(@name,' ')) X)
end
go
--Вызов
select dbo.firstBigLetterWithoutOrder('еСли кто-то кое-ГДе у наС порой');