Создайте эту встроенную пользовательскую функцию с табличным значением, которая может адаптироваться к любому размеру, который вы хотите, чтобы ваши чанки были:
CREATE OR ALTER FUNCTION dbo.ChunkNames(@name varchar(50), @len int)
RETURNS TABLE
AS
RETURN
(
WITH n(n) AS
(
SELECT n=1 UNION ALL
SELECT n+1 FROM n
WHERE n < LEN(@name)/@len
+ CASE LEN(@name)%@len WHEN 0 THEN 0
ELSE 1 END
)
SELECT n, chunk = SUBSTRING(@name,(n-1)*@len+1,@len) FROM n
);
GO
Теперь со следующими примерами данных:
CREATE TABLE #emp
(id int, name sysname);
INSERT #emp(id,name) VALUES(1,'harikrishnaxx'),
(2,'Baludevu'),(3,'woo'),(4,'booboo');
Тогда с этим запросом:
SELECT e.id, name = f.chunk
FROM #emp AS e
CROSS APPLY dbo.ChunkNames(e.name,3) AS f
ORDER BY e.id, f.n;
Вы получите следующие результаты:
id name
-- ----
1 har
1 ikr
1 ish
1 nax
1 x
2 Bal
2 ude
2 vu
3 woo
4 boo
4 boo
Если вам нужно использовать это для других строк, чтобы разделить, которые могут быть длиннее 100 символов, вам нужно будет добавить OPTION (MAXRECURSION 0)
к запросу.