@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
--table1为要转换的表,column1为要转换的表字段
调用:update table1 set column1=dbo.f_Convert(column1,0);
本文链接
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
注意:
UNION
SELECT s FROM table2SQL UNION ALL 语法(结果集有重复的值):SELECT s FROM table1
UNION ALL
SELECT s FROM table2
例子表:
表一(Employees_China):
E_ID E_Name
01 Zhang, Hua
02 Wang, Wei
03 Carter, Thomas
04 Yang, Ming
表二(Employees_USA):
E_ID E_Name
01 Adams, John
02 Bush, George
03 Carter, Thomas
04 Gates, Bill
实例:关于UNION:SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA
结果如下(去除了重复数据):E_NameZhang, HuaWang, WeiCarter, ThomasYang, MingAdams, JohnBush, GeorgeGates, Bill
关于UNION ALL:
SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA
结果如下(还保留了重复的数据):
本文链接
SQL 将变量定义为Table类型
在平时定义sql语句中的变量时通常我们定义的都是像char,vchar,nvchar,int........,那如何让变量作为一个像虚拟表一样呢,其实很简单。
基本语法:
declare @t table(列名1 列的数据类型1 , 列名2 列的数据类型2 , ...............)
insert into @t(列名1 ,列名2 ,...............) values (...............)
或者
insert into @t(列名1 ,列名2 ,...............) (select ....from....)
实验用表一(PeopleInfo):
id name phone
XC1 李某 123333333
XC2 小小 785555555
例如:
declare @t table(id nvarchar(3),[name] nvarchar(10) )
insert into @t(id,[name])
(select id, [name] from PeopleInfo where [Name] like '李%')
select * from @t
结果:
id name
XC1 李某
本文链接