簡體   English   中英

T-SQL從nvarchar字段中選擇特殊字符

[英]T-SQL select special characters from nvarchar field

我正在尋找一個select語句,在其中可以優化nvarchar字段中的值。 例如:輸入值為'!ab>c2 ghf5 ksj@_+wwl9' ,輸出必須為'abc ghf ksjwwl' 如何使用SQL正則表達式或其他方法刪除文本中的一些多余字符?

我不知道這是否有幫助,但是您可以定義一個包含所有要替換的字符/短語的表,並像這樣進行操作:

DECLARE @CharsToReplace TABLE(SearchFor VARCHAR(100),ReplaceWith VARCHAR(100));
INSERT INTO @CharsToReplace VALUES('1',''),('2',''),('3',''),('4',''),('5',''),('6',''),('7',''),('8',''),('9',''),('0','');

DECLARE @YourString VARCHAR(100)='abc2 ghf5 ksjwwl9';

SELECT @YourString=REPLACE(@YourString,SearchFor,ReplaceWith)
FROM @CharsToReplace;

SELECT @YourString;

結果

abc ghf ksjwwl

如果您要在ReplaceWith定義值,這也將起作用。

UPDATE您可以在任何選擇中使用的功能

注意 :這會很慢!

CREATE FUNCTION dbo.DeleteChars(@CharList NVARCHAR(MAX),@string NVARCHAR(MAX))
RETURNS NVARCHAR(MAX) 
AS
BEGIN
    DECLARE @List XML=(SELECT CAST('<x>'+ REPLACE(@CharList,',','</x><x>')+'</x>' AS XML));
    SELECT @string=REPLACE(@string,ch.value(N'.',N'nvarchar(max)'),'')
    FROM @List.nodes('/x') AS A(ch);
    RETURN @string;
END
GO

-用模型表測試

DECLARE @SomeTable TABLE(SomeColumn VARCHAR(100));
INSERT INTO @SomeTable VALUES('abc2 ghf5 ksjwwl9'),('123 abc 456 hello');

-這是字符列表(以逗號分隔)

DECLARE @CharList VARCHAR(100)='1,2,3,4,5,6,7,8,9,0';

-這就是你的稱呼

SELECT dbo.DeleteChars(@CharList,SomeColumn)
FROM @SomeTable
GO

- 清理

DROP FUNCTION dbo.DeleteChars;

結果

abc ghf ksjwwl
abc  hello

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM