Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 04.03.2016
Сообщений: 15
1

Вставить пробел перед заглавной буквой

22.01.2018, 14:55. Показов 4247. Ответов 3

Есть таблица в которой строки с ФИО сотрудника указаны слитно, к примеру ПетяИванов.
Подскажите, как можно разделить, чтобы формат был "Петя Иванов" с пробелами перед заглавными буквами.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.01.2018, 14:55
Ответы с готовыми решениями:

Строка: вставить пробел перед каждой заглавной буквой
Вводится строчка, например, HaveaNiceDay. Нужно чтобы выводилось Havea Nice Day, то есть перед...

Как вставить пробел рядом с заглавной буквой?
Привет всем, есть у меня задачка ,вот нужно строку вида hdgfjhbsBhjfdjdk, разделить пробелом так...

Вставить пробел перед каждой большой буквой в строке
Всем привет , столкнулся с проблемой , при вывода строки на экран нужно что бы перед каждой...

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

3
3954 / 3369 / 875
Регистрация: 29.08.2013
Сообщений: 21,995
Записей в блоге: 2
22.01.2018, 15:28 2
SQL
1
2
3
4
5
6
7
8
9
10
DECLARE @s VARCHAR(100) = 'ИвановИванИванович'
 
SELECT CASE WHEN ASCII(s) = ASCII(UPPER(s)) AND NUMBER > 1 THEN ' ' ELSE '' END + s
FROM(
    SELECT SUBSTRING(@s,NUMBER,1)s, NUMBER
    FROM master..spt_values
    WHERE TYPE = 'P' AND NUMBER BETWEEN 1 AND LEN(@s)
)t
ORDER BY NUMBER
FOR xml path('')
не мое

Добавлено через 2 минуты
вариант2
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DECLARE @name nvarchar(128) ='ПетровПетрПетрович'
DECLARE @sProbelom nvarchar(128) = ''
;WITH Bukwy(id, bukwa, hwost) AS
(
SELECT 0, LEFT(@name, 1), RIGHT(@name, LEN(@name)-1)
UNION ALL
SELECT id+2, LEFT(hwost, 1), RIGHT(hwost, LEN(hwost)-1) FROM Bukwy WHERE LEN(hwost)>0
)
, Probely(id, bukwa) AS
(
SELECT id, bukwa FROM Bukwy
UNION ALL SELECT id-1, ' ' FROM Bukwy 
WHERE ASCII(bukwa) = ASCII(UPPER(bukwa))
AND id > 0
)
SELECT @sProbelom = @sProbelom + bukwa FROM Probely ORDER BY id
SELECT @sProbelom
1
0 / 0 / 0
Регистрация: 04.03.2016
Сообщений: 15
22.01.2018, 16:12  [ТС] 3
Спасибо. Правда этот вариант отлично подходит если есть одна ячейка или фиксированное значение. В таблице которой использую, кол-во строк не постоянное и может меняться. Как можно будет реализовать перебор значений в колонке, назовём её Kollega (в таблице Table1) через цикл или другим образом?
0
3954 / 3369 / 875
Регистрация: 29.08.2013
Сообщений: 21,995
Записей в блоге: 2
22.01.2018, 16:59 4
Цитата Сообщение от Andystapler Посмотреть сообщение
Как можно будет реализовать перебор значений в колонке, назовём её Kollega (в таблице Table1) через цикл или другим образом?
лучше без циклов

сделайте функцию - вы ей строку без пробелов, она вам с пробелами

Добавлено через 18 минут
функция 3
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ALTER FUNCTION dbo.StringWithSpace (@string nvarchar(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @len INT = LEN(@string)
           ,@iterator INT = 2;
    WHILE @iterator <= LEN(@string)
    BEGIN
        IF PATINDEX('[АБВГДЕЖЗИКЛМНОПРСТУФХЦЧЩШ]',SUBSTRING(@string,@iterator,1) COLLATE Latin1_General_CS_AI) <> 0
        BEGIN
            SET @string = STUFF(@string,@iterator,0,' ');
            SET @iterator += 1;
        END;
        SET @iterator += 1;
    END
    RETURN @string;
END;
пример
SQL
1
2
3
4
5
DECLARE @t TABLE (id INT, FIO nvarchar(MAX))
INSERT @t SELECT 1, 'ИвановИванИванович'
INSERT @t SELECT 2, 'ПетровПетрПетрович'
INSERT @t SELECT 3, 'Сидоров'
SELECT id, dbo.StringWithSpace(Fio) FROM @t
первый пример почему то в функции только выдавал последний символ
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.01.2018, 16:59

Проставить точки перед заглавной буквой
Всех приветствую, помогите, пожалуйста, составить регулярку, с помощью которой можно поставить...

Как перед каждой заглавной буквой поставить точку в массиве
Можете подсказать как перед каждой заглавной буквой поставить точку с помощью цикла for.

Заменить символ, стоящий перед прописной буквой на пробел
Ввести массив из 10 символов. Если символ массива является прописной буквой латинского алфавита (т....

Вставить символ перед английским словом или буквой
Есть исходная строка в которой присутствуют английские и русские слова или буквы. требуется перед...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru