如何将全角字符转化为半角字符?
如何将全角字符转化为半角字符?
谢谢了。
问题点数:20、回复次数:8Top
1 楼zjcxc(邹建)回复于 2005-04-19 11:14:55 得分 20
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_convert]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_convert]
GO
/*--全角/半角转换
转换说明
全角字符从的unicode编码从65281~65374
半角字符从的unicode编码从 33~126
空格比较特殊,全角为 12288,半角为 32
而且除空格外,全角/半角按unicode编码排序在顺序上是对应的
所以可以直接通过用+-法来处理非空格数据,对空格单独处理
like的时候,指定排序规则 COLLATE Latin1_General_BIN
是保证字符顺序按unicode编码排序
(此函数部分思路参考了CSDN上大力的转换函数)
--邹建 2005.01(引用请保留此信息)--*/
/*--调用示例
declare @s1 varchar(8000)
select @s1='中 2-3456a78STUVabn中国opwxyz'
select dbo.f_convert(@s1,0),dbo.f_convert(@s1,1)
--*/
CREATE FUNCTION f_Convert(
@str NVARCHAR(4000), --要转换的字符串
@flag bit --转换标志,0转换成半角,1转换成全角
)RETURNS nvarchar(4000)
AS
BEGIN
DECLARE @pat nvarchar(8),@step int,@i int,@spc int
IF @flag=0
SELECT @pat=N'%[!-~]%',@step=-65248,
@str=REPLACE(@str,N' ',N' ')
ELSE
SELECT @pat=N'%[!-~]%',@step=65248,
@str=REPLACE(@str,N' ',N' ')
SET @i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str)
WHILE @i>0
SELECT @str=REPLACE(@str,
SUBSTRING(@str,@i,1),
NCHAR(UNICODE(SUBSTRING(@str,@i,1))+@step))
,@i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str)
RETURN(@str)
END
GO
Top
2 楼friendliu(无为)回复于 2005-04-19 11:34:56 得分 0
学习,收藏Top
3 楼netmin(网min)回复于 2005-04-19 11:43:46 得分 0
收藏Top
4 楼smartmarkey()回复于 2005-04-19 12:37:23 得分 0
好答复!赶紧收藏!Top
5 楼cemma(佩)回复于 2005-04-19 13:55:49 得分 0
markTop
6 楼Hopewell_Go(好的在后頭﹗希望更好﹗﹗)回复于 2005-04-19 15:32:18 得分 0
學習并收藏
好東西啊Top
7 楼zlj113(·米老鼠· 学习)回复于 2005-04-19 15:40:28 得分 0
收藏Top
8 楼ncowboy(可以很色,但是绝不可以猥琐)回复于 2005-04-19 17:23:57 得分 0
谢谢。但是,csdn好像现在无法接贴。Top





