需要在带有 ' ' 或 ',' 的非常列的字符串中插入中断

Need to insert breaks in strings of very column with ' ' or ','

我有一个 table 有一个列但超过 100,000 行
Col_Name qwchijhuirhxnihdiuyfnx

         dhjhfiurhncnmxmzjcoinrds

         xnbxknsiiuncirnxknrxnxz

我需要插入一个'.'或'$'或每第3个字符后的一些标记

所需结果示例:

         Col_Name
         qwc.hij.hui.rhx.nih.diu.yfn.x
         dhj.hfi.urh.ncn.mxm.zjc.oin.rds.
         xnb.xkn.sii.unc.irn.xkn.rxn.xz

我最初用以下方法解决了这个问题:

INSERT INTO New_Table
(
c1
,c2
,c3
)
SELECT 
     substring(CAST(Col_Name AS VARCHAR(MAX)),1,3) as C1
     ,substring(CAST(Col_Name AS VARCHAR(MAX)),4,3) as C2
     ,substring(CAST(Col_Name AS VARCHAR(MAX)),7,3) as C3
     From Table_Name

这会导致脚本稍后出现问题,因此数据必须保留在一列中,但可以插入到新的 table 中,只要它是只有一列的新 table

这是一个 sqlfiddle 起点,您可以使用函数和 while 循环重构 http://sqlfiddle.com/#!6/ab6dd/1/0

如果您需要速度,您可以使用正则表达式或 SQLCLR 做一些更高效的事情。

CREATE FUNCTION dotify (@input varchar(MAX))
RETURNS varchar(MAX)
AS
BEGIN

DECLARE @output varchar(MAX) = ''

declare @index int = 0
declare @length int
set @length = len(@input)
while @index <= @length
begin
 SET @output = @output + substring(@input, @index, 1)
 if (@index % 3) = 0 AND @index > 0
 BEGIN
   SET @output = @output +'.'
 END
 set @index = @index + 1
end
return(@output)
END
GO
select TOP 10000 col_name, dbo.dotify(col_name) FROM  old_table

您可以使用 TOP 将处理时间限制为几秒钟,这样您就可以轻松地分析您所做的效率更改。