如何从T-SQL中的字符串中删除扩展的ASCII字符?

Cod*_*man 10 sql t-sql sql-server string ascii

我需要从T-SQL中的SELECT语句中过滤掉(删除)扩展的ASCII字符.

我正在使用存储过程来执行此操作.

预期投入:

ËËËËeeeeËËËË
Run Code Online (Sandbox Code Playgroud)

预期产量:

eeee
Run Code Online (Sandbox Code Playgroud)

我发现的所有内容都是针对MySQL的.

我正在使用 :

Microsoft SQL Server Management Studio  11.0.2100.60
Microsoft .NET Framework    4.0.30319.17929
Run Code Online (Sandbox Code Playgroud)

ami*_*han 31

好的,试一试.看来他们有同样的问题.无论如何,您需要根据您的要求进行修改.

CREATE FUNCTION RemoveNonASCII 
(
    @nstring nvarchar(255)
)
RETURNS varchar(255)
AS
BEGIN

    DECLARE @Result varchar(255)
    SET @Result = ''

    DECLARE @nchar nvarchar(1)
    DECLARE @position int

    SET @position = 1
    WHILE @position <= LEN(@nstring)
    BEGIN
        SET @nchar = SUBSTRING(@nstring, @position, 1)
        --Unicode & ASCII are the same from 1 to 255.
        --Only Unicode goes beyond 255
        --0 to 31 are non-printable characters
        IF UNICODE(@nchar) between 32 and 255
            SET @Result = @Result + @nchar
        SET @position = @position + 1
    END

    RETURN @Result

END
GO
Run Code Online (Sandbox Code Playgroud)

SqlServerCentral上查看它

  • ASCII只到127. (8认同)
  • @ dan04是对的.你需要将255改为127 imo (2认同)
  • @dan04 ASCII 确实达到 255。低于 32 或高于 127 是扩展 ASCII 字符。由于OP要求删除它们,因此应该将其更改为“32和127之间”,但这只是因为这是所要求的,而不是因为它们不是ASCII。http://www.asciitable.com/ (2认同)