需要在''或'''中插入非常列的字符串中的分隔符

时间:2015-07-23 22:44:51

标签: sql-server insert sql-server-2014

我的桌子有一列但超过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

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

1 个答案:

答案 0 :(得分:1)

这是一个平方的起点,您可以使用函数和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将处理时间限制为几秒钟,以便轻松分析您所做的效率变化。