PDA

View Full Version : Charindex,unicode



ducletan
07-06-2011, 10:08
Tôi viết hàm loại bỏ dấu tiếng việt (SQL 2005)
dbo.bodau('Lê tấn Đức') -> Le Tan Duc

CREATE FUNCTION dbo.bodau (
@sstring nvarchar(max)
)
RETURNS varchar(max)
AS
BEGIN
if len(@sstring)=0 return''
declare @str As table ([vn] nvarchar(max),[vnU] nvarchar(max),[vn1] char(1))
insert into @str ([vn],[VNU],[vn1]) values ('áàảãạăắằẳẵặâấầẩẫậ', 'ÁÀẢÃẠĂẮẰẲẴẶÂẤẦẨẪẬ',' a')
insert into @str ([vn],[VNU],[vn1]) values ('éèẻẽẹêếềểễệ','ÉÈẺẼẸÊ ẾỀỂỄỆ','e')
insert into @str ([vn],[VNU],[vn1]) values ('íìỉĩị','ÍÌỈĨỊ','i')
insert into @str ([vn],[VNU],[vn1]) values ('ýỳỷỹỵ','ÝỲỶỸỴ','y')
insert into @str ([vn],[VNU],[vn1]) values ('óòỏõọôốồổỗộơớờởợỡ', 'ÓÒỎÕỌÔỐỒỔỖỘƠỚỜỞỠỢ',' o')
insert into @str ([vn],[VNU],[vn1]) values ('úùủũụưứừửữự','ÚÙỦŨỤƯ ỪỬỮỰ','u')
insert into @str ([vn],[VNU],[vn1]) values ('đ','Đ','d')


declare @sreturn varchar(max)
declare @sreturn1 char(1)
set @sreturn=''
declare @str1 cursor
declare @ndem INT

set @ndem=1
while @ndem<=len(@sstring)

begin
select @sreturn1=ISNULL(
(select case CHARINDEX(SUBSTRING(@sstring,@ndem,1),[vn]) when 0
then ( case CHARINDEX(SUBSTRING(@sstring,@ndem,1),[vnU]) when 0 then null else upper([vn1]) END )
else [vn1] end from @str where CHARINDEX(SUBSTRING(@sstring,@ndem,1),[vn])>0 or CHARINDEX(SUBSTRING(@sstring,@ndem,1),[vnU])>0 )
,SUBSTRING(@sstring,@ndem,1))
SET @sreturn=@sreturn+@sreturn1
set @ndem=@ndem+1
end
RETURN @sreturn

END

Hàm không làm việc đúng.Nhờ giúp chỉnh sửa