我有以下数据:
0297144600-4799 0297485500-5599
0297485500-5599基于观察总是在左边的31号角上,这是一个简单的方法。
但我想做的是预测以下数据如下所示,这意味着该职位不再有效:
0297144600-4799 0297485500-5599 0297485600-5699
正如你所看到的,我猜第一种方法是将1个空格分开(“”)但是由于空间数量未知(变化),我该如何采用这种方法呢?有没有找到空间的方法,缩小到1个空格(“”)。
BTW ......它需要在TSQL(Ms SQL 2005)中完成,不幸的是它导致了SSIS :(
我对你的想法/建议持开放态度。
由于
答案 0 :(得分:2)
我已经更新了我的答案,现在我知道数字模式并不总是匹配。此代码假定序列将以数字开头和结尾,并以任意数量的空格分隔。
DECLARE @input nvarchar -- max in parens
DECLARE @pattern nvarchar -- max in parens
DECLARE @answer nvarchar -- max in parens
DECLARE @pos int
SET @input = ' 0297144623423400-4799 5615618131201561561 0297485600-5699 '
-- Make sure our search string has whitespace at the end for our pattern to match
SET @input = @input + ' '
-- Find anything that starts and ends with a number
WHILE PATINDEX('%[0-9]%[0-9] %', @input) > 0
BEGIN
-- Trim off the leading whitespace
SET @input = LTRIM(@input)
-- Find the end of the sequence by finding a space
SET @pos = PATINDEX('% %', @input)
-- Get the result out now that we know where it is
SET @answer = SUBSTRING(@input, 0, @pos)
SELECT [Result] = @answer
-- Remove the result off the front of the string so we can continue parsing
SET @input = SUBSTRING(@input, LEN(@answer) + 1, 8096)
END
答案 1 :(得分:1)
假设您一次处理一行,您也可以尝试:
DECLARE @InputString nvarchar(max)
SET @InputString = '0297144600-4799 0297485500-5599 0297485600-5699'
BEGIN
WHILE CHARINDEX(' ',@InputString) > 0 -- Checking for double spaces
SET @InputString =
REPLACE(@InputString,' ',' ') -- Replace 2 spaces with 1 space
END
PRINT @InputString