Code
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
/* -- Fullwidth/halfwidth Conversion
Conversion description
Full-width characters are encoded From unicode 65281 ~ 65374
The unicode encoding of halfwidth characters ranges from 33 ~ 126
The space is special. The width is 12288 and the width is 32.
Besides spaces, the full/half-width values are sorted in unicode encoding order.
Therefore, you can use the +-method to process non-space data and separate the space.
When like, specify the sorting rule COLLATE Latin1_General_BIN
Is to ensure that the character order is sorted by unicode encoding
Declare @ s1 varchar (8000)
Select @ s1 = 'medium 2-3456a78STUVabn China opwxyz'
Select dbo. f_convert (@ s1, 0), dbo. f_convert (@ s1, 1)
*/
Create FUNCTION f_Convert (
@ Str NVARCHAR (4000), -- string to be converted
@ Flag bit -- Conversion flag. 0 is converted to halfwidth, and 1 is converted to fullwidth.
) 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
/*
Declare @ s1 varchar (8000)
Select @ s1 = 'medium 2-3456a78STUVabn China opwxyz'
Select dbo. f_convert (@ s1, 0), dbo. f_convert (@ s1, 1)
*/