需要在带有 ' ' 或 ',' 的非常列的字符串中插入中断
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 将处理时间限制为几秒钟,这样您就可以轻松地分析您所做的效率更改。
我有一个 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 将处理时间限制为几秒钟,这样您就可以轻松地分析您所做的效率更改。