我要将数据管理到这里,它之间有空格:
0297144600-4799 0297485500-5599
0297144600-0297144799 0297485500-5599
0297144600-0297144799 0297485500-0297485599
我想将第一行/第二行标准化,就像最后一行一样,这意味着
0297144600-4799 >> 0297144600-0297144799
挑战在于它可以是这种格式:0297144600-4799或已经标准化,例如这些条目可以超过2个系列:
0297144600-4799 0297485500-5599 0297486500-6599
但总是按空格分隔(理论上如果你愿意,它可以用'|'代替)。我确实有一个拆分方法,但现在如何组合它。
尽可能避免使用光标。
由于
答案 0 :(得分:0)
这有点类似于你的想法吗?
declare @table table (old_pair nvarchar(21), new_pair nvarchar(21), pair_left nvarchar(10), pair_right nvarchar(10))
declare @abnormal nvarchar(max)
set @abnormal = isnull('0297144600-0297144799 0297485500-0297485599','')
--set @abnormal = isnull('0297144600-4799 0297485500-5599','')
--set @abnormal = isnull('0297485500-5599','')
declare @pair nvarchar(max)
declare @pair_left nvarchar(10)
declare @pair_right nvarchar(10)
declare @pair_right_length int
WHILE len(isnull(@abnormal,'')) > 0
BEGIN
IF charindex(' ', @abnormal) = 0
BEGIN
set @pair = @abnormal
END
ELSE
BEGIN
set @pair = left(@abnormal, charindex(' ', @abnormal)-1)
END
set @pair_left = left(@pair, 10)
set @pair_right_length = len(right(@pair,len(@pair)-11))
set @pair_right = left(@pair_left, 10-@pair_right_length) + right(@pair,len(@pair)-11)
insert @table
( old_pair,
new_pair,
pair_left,
pair_right )
select
@pair,
@pair_left + '-' + @pair_right,
@pair_left,
@pair_right
IF @pair = @abnormal
BEGIN
set @abnormal = (right(@abnormal, len(@abnormal)-len(@pair)))
END
ELSE
BEGIN
set @abnormal = (right(@abnormal, len(@abnormal)-(len(@pair)+1)))
END
END
select * from @table