TSQL从字符串中剥离数字

时间:2016-09-01 03:16:11

标签: sql sql-server tsql

我有一个字符串如下,并假设“。”始终存在于字符串中。

'NAB 12345 Tom Heading abcde@yahoo.com.au Web 20294821. Australia Regular Post'

如何使用TSQL从上面的字符串中删除20294821?

我尝试了以下内容,但只有在数字是字符串中的最后一个字

时才有效
REPLACE(REVERSE( LEFT( REVERSE(Comments), CHARINDEX(' ', REVERSE(Comments))-1 ) ) ,'.','')

-Alan -

3 个答案:

答案 0 :(得分:1)

你也可以如下:

DECLARE @Comments as VARCHAR(255) = 'NAB 12345 Tom Heading abcde@yahoo.com.au Web 20294821. Australia Regular Post'

SELECT REPLACE(@Comments, LEFT(RIGHT(@Comments, LEN(@Comments) - CHARINDEX('Web ', @Comments, 0) - 3), CHARINDEX('.', RIGHT(@Comments, LEN(@Comments) - CHARINDEX('Web ', @Comments, 0) - 3), 0) - 1), '')

答案 1 :(得分:0)

由于可能的字符串模式不确定,我在此基于您想要删除最右边的点.和最左边的最近空间之间的字符串的假设来回答这个问题。 dot

DECLARE @Comments VARCHAR (MAX)
SET @Comments = 'NAB 12345 Tom Heading abcde@yahoo.com.au Web 20294821. Australia Regular Post'

DECLARE @Comments_TrimmedContent VARCHAR (MAX)
DECLARE @Comments_TrimmedAfterDot VARCHAR (MAX) 
SELECT @Comments_TrimmedContent = REVERSE( LEFT( REVERSE(@Comments), CHARINDEX('.', REVERSE(@Comments)) )) 
SELECT @Comments_TrimmedAfterDot = REVERSE( RIGHT( REVERSE(@Comments), LEN(@Comments) - CHARINDEX('.', REVERSE(@Comments)) - 1 )) 

SELECT REVERSE( RIGHT ( REVERSE(@Comments_TrimmedAfterDot), LEN(@Comments_TrimmedAfterDot) - CHARINDEX(' ', REVERSE(@Comments_TrimmedAfterDot)))) + @Comments_TrimmedContent

输出:

NAB 12345 Tom Heading abcde@yahoo.com.au Web. Australia Regular Post

答案 2 :(得分:0)

最后一行有最终答案,但我已经分解了使事情变得更加连贯的步骤。

它返回第一个Web空间和句号之间的值。

DECLARE @Comments as VARCHAR(255)

SET @Comments = 'NAB 12345 Tom Heading abcde@yahoo.com.au Web 20294821. Australia Regular Post'

SELECT @Comments

-- Assume there is only one occurence of web and a space
SELECT CHARINDEX('Web ', @Comments)

--Show the substring starting from the number (skip for 4 characters for web and a space)
SELECT SUBSTRING(@Comments, CHARINDEX('Web ', @Comments) + 4, LEN(@Comments))

--Find the full stop after the web space
SELECT CHARINDEX('.', SUBSTRING(@Comments, CHARINDEX('Web ', @Comments) + 4, LEN(@Comments)))

--Combine all of the above logic to give the answer
SELECT SUBSTRING(@Comments, CHARINDEX('Web ', @Comments) + 4, CHARINDEX('.', SUBSTRING(@Comments, CHARINDEX('Web ', @Comments) + 4, LEN(@Comments)))-1)
相关问题