SqlServer数据库如何实现全角和半角互转

来源:个人站长网作者:厦门程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《SqlServer数据库如何实现全角和半角互转》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《SqlServer数据库如何实现全角和半角互转》有用,将其分享出去将是对创作者最好的鼓励。

在SqlServer数据库的使用过程中,全角字符和半角字符的转换是常见需求,比如用户录入的姓名、地址等字段可能混合了全角和半角字符,需要统一格式来保证数据一致性,或者方便后续的模糊查询、数据统计操作。SqlServer本身没有提供内置的全角半角转换函数,因此需要通过自定义函数来实现转换逻辑。

SqlServer数据库如何实现全角和半角互转

全角和半角字符的编码规则

全角字符和半角字符的核心区别在于编码范围,常见字符的转换规则如下:

  • 半角空格的ASCII码是32,全角空格的编码是12288
  • 半角字符(数字、字母、英文标点)的ASCII码范围是33到126,对应的全角字符编码范围是65281到65374,两者之间的差值是65248
  • 除了上述规则外的其他字符,一般不存在全角半角的对应关系,转换时保持原字符即可

全角转半角的自定义函数实现

根据编码规则,我们可以编写全角转半角的自定义函数,遍历输入字符串的每个字符,按照规则进行转换:

-- 全角转半角函数
CREATE FUNCTION dbo.FullToHalf (@str NVARCHAR(4000))
RETURNS NVARCHAR(4000)
AS
BEGIN
    DECLARE @i INT = 1
    DECLARE @len INT = LEN(@str)
    DECLARE @result NVARCHAR(4000) = N''
    DECLARE @currentChar NCHAR(1)
    DECLARE @charCode INT

    WHILE @i <= @len
    BEGIN
        -- 获取当前字符
        SET @currentChar = SUBSTRING(@str, @i, 1)
        -- 获取字符的Unicode编码
        SET @charCode = UNICODE(@currentChar)

        -- 处理全角空格
        IF @charCode = 12288
        BEGIN
            SET @result = @result + NCHAR(32)
        END
        -- 处理全角数字、字母、英文标点
        ELSE IF @charCode >= 65281 AND @charCode <= 65374
        BEGIN
            SET @result = @result + NCHAR(@charCode - 65248)
        END
        -- 其他字符保持不变
        ELSE
        BEGIN
            SET @result = @result + @currentChar
        END

        SET @i = @i + 1
    END

    RETURN @result
END

半角转全角的自定义函数实现

半角转全角的逻辑和全角转半角相反,同样遍历字符串每个字符,按照编码差值进行转换:

-- 半角转全角函数
CREATE FUNCTION dbo.HalfToFull (@str NVARCHAR(4000))
RETURNS NVARCHAR(4000)
AS
BEGIN
    DECLARE @i INT = 1
    DECLARE @len INT = LEN(@str)
    DECLARE @result NVARCHAR(4000) = N''
    DECLARE @currentChar NCHAR(1)
    DECLARE @charCode INT

    WHILE @i <= @len
    BEGIN
        -- 获取当前字符
        SET @currentChar = SUBSTRING(@str, @i, 1)
        -- 获取字符的Unicode编码
        SET @charCode = UNICODE(@currentChar)

        -- 处理半角空格
        IF @charCode = 32
        BEGIN
            SET @result = @result + NCHAR(12288)
        END
        -- 处理半角数字、字母、英文标点
        ELSE IF @charCode >= 33 AND @charCode <= 126
        BEGIN
            SET @result = @result + NCHAR(@charCode + 65248)
        END
        -- 其他字符保持不变
        ELSE
        BEGIN
            SET @result = @result + @currentChar
        END

        SET @i = @i + 1
    END

    RETURN @result
END

函数的使用方法

函数创建完成后,可以直接在查询中使用,示例如下:

-- 测试全角转半角
SELECT dbo.FullToHalf(N'Hello World 123') AS HalfResult
-- 返回结果:Hello World 123

-- 测试半角转全角
SELECT dbo.HalfToFull(N'Hello World 123') AS FullResult
-- 返回结果:Hello World 123

-- 对表中字段进行转换
SELECT user_name, dbo.FullToHalf(user_name) AS half_user_name
FROM user_info
WHERE user_name LIKE N'%e%'

注意事项

  • 函数中的字符串参数使用NVARCHAR类型,避免中文等Unicode字符出现乱码
  • 如果输入的字符串长度超过4000,可以调整函数参数的长度定义,比如改成NVARCHAR(MAX)
  • 转换仅针对常见的数字、字母、英文标点和空格,其他字符比如中文、全角中文标点等不会进行转换,也不会被修改
  • 函数创建后,需要有对应的数据库权限才能调用,一般给相关用户授予函数的执行权限即可

SqlServer全角半角互转自定义函数字符串处理数据库函数修改时间:2026-07-12 07:06:23

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。