以下是函数的创建
有几个问题不明白
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编码排序
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'%[!-~]%', //这里的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 这里的N 是什么意思? %[!-~]% 是什么意思?求解释 !-~是指的unicode码是从!开始到~结束吗?查了一下好像不是啊
有几个问题不明白
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编码排序
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'%[!-~]%', //这里的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 这里的N 是什么意思? %[!-~]% 是什么意思?求解释 !-~是指的unicode码是从!开始到~结束吗?查了一下好像不是啊
解决方案 »
- id对应一个vachar字段的查询
- SQL2000 的 in 关键字是不是对varchar不起作用?
- 求sql语句?(急)
- 将一个具有多个Join和Group by大量字段的SQL语句分成两个相对简单的SQL 语句,那种情况效率高一些?
- 时间的数据类型,求助
- 如何把同一台机器上的有相同结构的不同数据库A,B全部实时放入另一数据库C中,进来有分数!!谢谢!!!
- 黑的可以访问红的,红的访问不到黑的,不知道为什么。
- 疑难问题,请问如何解决?
- 在企业管理器里误打了 Delete From tablename 后有办法后悔吗?
- 如何每天备份,每天生成一个目录(日期)\备份文件?
- union all 合并问题
- 简单问题,当一回伸手党
top 94 n=identity(tinyint,33,1)
into #1
from syscolumns select
nchar(n+65248) AS 全角 ,char(n) AS 半角
from #1
/*
全角 半角
! !
" "
# #
$ $
% %
& &
' '
( (
) )
* *
+ +
, ,
- -
. .
/ /
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
: :
; ;
< <
= =
> >
? ?
@ @
A A
B B
C C
D D
E E
F F
G G
H H
I I
J J
K K
L L
M M
N N
O O
P P
Q Q
R R
S S
T T
U U
V V
W W
X X
Y Y
Z Z
[ [
\ \
] ]
^ ^
_ _
` `
a a
b b
c c
d d
e e
f f
g g
h h
i i
j j
k k
l l
m m
n n
o o
p p
q q
r r
s s
t t
u u
v v
w w
x x
y y
z z
{ {
| |
} }
~ ~
*/