You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server或MS Access中解码HTML数字字符引用文本?

没问题!不管你是用SQL Server还是链接的MS Access数据库,都能轻松把这些Numeric character reference(数字字符引用)转换成对应的正常文本。下面分别给你两种环境下的具体解决方案:

1. 在SQL Server中处理

SQL Server没有直接内置解码这类实体的函数,但我们可以自己写一个自定义标量函数来处理。这个函数会循环查找所有&#xxxx;格式的实体,把里面的十进制代码点转换成对应的Unicode字符:

CREATE FUNCTION dbo.DecodeNumericEntities(@Input NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @Result NVARCHAR(MAX) = @Input;
    DECLARE @Start INT, @End INT, @Code NVARCHAR(10);

    WHILE CHARINDEX('&#', @Result) > 0
    BEGIN
        SET @Start = CHARINDEX('&#', @Result) + 2;
        SET @End = CHARINDEX(';', @Result, @Start);
        IF @End > 0
        BEGIN
            SET @Code = SUBSTRING(@Result, @Start, @End - @Start);
            -- 将十进制代码点转换为Unicode字符
            SET @Result = STUFF(@Result, @Start - 2, @End - @Start + 3, NCHAR(CAST(@Code AS INT)));
        END
        ELSE
            BREAK; -- 遇到不完整的实体格式时退出循环
    END
    RETURN @Result;
END

创建好函数后,就可以直接在查询中使用了:

SELECT dbo.DecodeNumericEntities('sweet shop') AS DecodedText;

执行后会得到结果:sweet shop

2. 在MS Access中处理

Access可以通过VBA自定义函数来实现解码,然后在查询中调用这个函数。步骤如下:

  1. 打开Access数据库,按下Alt + F11打开VBA编辑器
  2. 插入一个新模块,粘贴下面的代码:
Function DecodeNumericEntities(ByVal InputText As String) As String
    Dim Result As String
    Dim StartPos As Integer, EndPos As Integer
    Dim CodeStr As String, Code As Integer
    
    Result = InputText
    
    Do While InStr(Result, "&#") > 0
        StartPos = InStr(Result, "&#") + 2
        EndPos = InStr(StartPos, Result, ";")
        If EndPos > 0 Then
            CodeStr = Mid(Result, StartPos, EndPos - StartPos)
            If IsNumeric(CodeStr) Then
                Code = CInt(CodeStr)
                -- 使用ChrW转换Unicode字符
                Result = Left(Result, StartPos - 3) & ChrW(Code) & Mid(Result, EndPos + 1)
            Else
                -- 遇到非数字的代码点,直接保留原内容
                Result = Left(Result, EndPos) & Mid(Result, EndPos + 1)
            End If
        Else
            Exit Do
        End If
    Loop
    
    DecodeNumericEntities = Result
End Function
  1. 保存模块后,回到查询设计视图,编写查询调用这个函数:
SELECT DecodeNumericEntities("sweet shop") AS DecodedText;

执行查询后同样会得到sweet shop

小提示

上面的函数都只处理十进制的数字字符引用(&#xxxx;格式),如果你的文本里还有十六进制的格式(&#xXXXX;),可以扩展函数逻辑,把十六进制字符串转换成十进制再处理就行。

内容的提问来源于stack exchange,提问作者atreeon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:33:26