1

如何替换表格中的字符集?

ColumnA
%%1234UIT
!!1234TTT
678@@PPP

目前我正在使用

`replace(replace(replace([BLOCK_NAME],'%%',''),'!!',''),'@@',''),1,LEN(BLOCK_NAME)-1`
OR
replace(replace(replace(substring([BLOCK_NAME],1,LEN(BLOCK_NAME)-1),'**',''),'##',''),'$$','')
Expected OUTPUT:
1234UIT
123TTT
678PPP
4

3 回答 3

1

请参阅如何从字符串中删除非数字/非字母数字字符

CREATE FUNCTION [fnRemoveNonNumericCharacters](@strText VARCHAR(1000))
RETURNS VARCHAR(1000)
AS
BEGIN
    WHILE PATINDEX('%[^a-z0-9]%', @strText) > 0
    BEGIN
        SET @strText = STUFF(@strText, PATINDEX('%[^a-z0-9]%', @strText), 1, '')
    END
    RETURN @strText
END

使用创建的函数选择数据

SELECT 
    dbo.fnRemoveNonNumericCharacters(BLOCK_NAME)
FROM 
    YourTable

或者

;WITH T as(
  SELECT STUFF(BLOCK_NAME, PATINDEX('%[^a-z0-9]%', BLOCK_NAME), 1, '') BLOCK_NAME from YourTable
  UNION ALL
  SELECT STUFF(BLOCK_NAME, PATINDEX('%[^a-z0-9]%', BLOCK_NAME), 1, '') BLOCK_NAME from T where PATINDEX('%[^a-z0-9]%', BLOCK_NAME) > 0
)
select 
    * 
from 
    T 
where PATINDEX('%[^a-z0-9]%', BLOCK_NAME) = 0

我更喜欢使用没有用户定义函数的 CTE 的第二种方法。

于 2013-10-18T07:21:28.250 回答
1

这应该适用于您的问题,它会从记录中删除所有非数字字符。您可以创建要从查询中调用的 sql 函数。

WHILE PATINDEX('%[^0-9]%', @strText) > 0
BEGIN
    SET @strText = STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '')
END
RETURN @strText
于 2013-10-18T07:06:03.480 回答
1

您可以创建一个函数:

CREATE FUNCTION [dbo].[fn_RemoveCharacters]
(
    @Str NVARCHAR(MAX), 
    @MatchExpression VARCHAR(255)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
    SET @MatchExpression =  '%['+@MatchExpression+']%'

    WHILE PatIndex(@MatchExpression, @Str) > 0
        SET @Str = Stuff(@Str, PatIndex(@MatchExpression, @Str), 1, '')

    RETURN @Str

END

Go 

然后将其称为:

SELECT [dbo].[fn_RemoveCharacters](ColumnA, '%%!!@@') as ColumnA
from table1

希望这可以帮助!!!

于 2013-10-18T07:21:56.150 回答