Как сделать первую букву заглавной sql
Перейти к содержимому

Как сделать первую букву заглавной sql

  • автор:

Перевести первые буквы слов с верхний регистр

В таблице перевести все имена в верхний регистр
Имеем базу 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('еСли кто-то кое-ГДе у наС порой');

--Результат
Если Кто-то Кое-где У Нас Порой

Пояснения.

  1. Конструкция CREATE OR ALTER FUNCTION появилась в SQL Server 2017 как аналог CREATE OR REPLACE FUNCTION в PostgreSQL. Теперь не нужно напрягать память, чтобы не забыть поменять ALTER на CREATE после отладки.
  2. Столбец Identity задает нам порядок, в котором следуют слова в предложении. Поэтому при сборке мы используем сортировку именно по этому столбцу — WITHIN GROUP (ORDER BY id).
  3. Естественно, можно было не выполнять разбивку на слова, а, например, использовать рекурсивный запрос, но я преследовал тут вполне определенные учебные цели. Если кто-то решит оценить производительность различных алгоритмов, можете поделиться результатами в комментариях.

Функция 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('еСли кто-то кое-ГДе у наС порой');

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *