首页 > 数据库 >SQL Server 全角半角转换

SQL Server 全角半角转换

时间:2023-02-27 14:45:53浏览次数:56  
标签:pat str 全角 半角 Server -- UNICODE SQL

哪些字符是有全角和半角之分的?

首先,中文是只有全角,没有半角之分,所以转换的时候可以忽略掉中文字符。

 

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 

 

标签:pat,str,全角,半角,Server,--,UNICODE,SQL
From: https://www.cnblogs.com/lgx5/p/17159600.html

相关文章