SQL Server 全角半角转换
哪些字符是有全角和半角之分的?
首先,中文是只有全角,没有半角之分,所以转换的时候可以忽略掉中文字符。
select UNICODE('a'),UNICODE('a'),UNICODE('a')-UNICODE('a') ---97| 265345| 65248
在ASCII码中,英文字符与标点的编码范围为33~126,用SQL 通配符表示为:
[!-~]
,当然,全角字符的编码是超出ASCII编码范围的,只需在半角的ASCII的编码基础加上差值65248
就能得到全角的UNICODE编码。
了解了半角和全角的关系之后可以写个函数来相互转换
1 CREATE FUNCTION fn_Convert( 2 @str NVARCHAR(4000), --要转换的字符串 3 @flag BIT --转换标志,0转换成半角,1转换成全角 4 ) 5 RETURNS NVARCHAR(4000) 6 AS 7 BEGIN 8 DECLARE 9 @pat NVARCHAR(8), 10 @step INT, 11 @i INT, 12 @spc INT 13 14 IF @flag = 0 15 SELECT 16 @pat = N'%[!-~]%', --全角的通配符 17 @step = -65248, 18 @str = REPLACE(@str, N' ', N' ') 19 ELSE 20 SELECT 21 @pat = N'%[!-~]%', --半角的通配符 22 @step = 65248, 23 @str = REPLACE(@str, N' ', N' ') 24 --指定排序规则 25 SET @i = PATINDEX(@pat collate LATIN1_GENERAL_BIN, @str) 26 WHILE @i > 0 27 SELECT 28 @str = REPLACE(@str, 29 SUBSTRING(@str, @i, 1), 30 NCHAR(UNICODE(SUBSTRING(@str, @i, 1)) + @step)), 31 @i = PATINDEX(@pat collate LATIN1_GENERAL_BIN, @str) 32 RETURN (@str) 33 END
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
2022-02-27 H5调用手机摄像头和相册
2022-02-27 jquery监听页面滚动条滚动事件
2021-02-27 C# 打印PDF文档的10种方法
2019-02-27 Func与Action
2019-02-27 JavaScript编码规范