SQL切割 和复制以及一些好的网址

来源:互联网 发布:ubuntu您不是所有者 编辑:程序博客网 时间:2024/06/13 05:42

比较两表是否相同:if(select * from A)=(select * from B)

只复制一个表结构,而不复制数据。

select * into t1 from t2


三、 分隔字符串
如果有一个用逗号分割开的字符串,比如说"a,b,c,d,1,2,3,4",如何用t-sql获取这个字符串有几个元素,获取第几个元素的值是多少呢?因为t-sql里没有split函数,也没有数组的概念,所以只能自己写几个函数了。
1、 获取元素个数的函数


create function getstrarrlength (@str varchar(8000))
returns int
as
begin
  declare @int_return int
  declare @start int
  declare @next int
  declare @location int
  select @str =','+ @str +','
  select @str=replace(@str,',,',',')
  select @start =1
  select @next =1
  select @location = charindex(',',@str,@start)
  while (@location <>0)
  begin
    select @start = @location +1
    select @location = charindex(',',@str,@start)
    select @next =@next +1
  end
 select @int_return = @next-2
 return @int_return
end

2、 获取指定索引的值的函数


create function getstrofindex (@str varchar(8000),@index int =0)
returns varchar(8000)
as
begin
  declare @str_return varchar(8000)
  declare @start int
  declare @next int
  declare @location int
  select @start =1
  select @next =1 --如果习惯从0开始则select @next =0
  select @location = charindex(',',@str,@start)
  while (@location <>0 and @index > @next )
  begin
    select @start = @location +1
    select @location = charindex(',',@str,@start)
    select @next =@next +1
  end
  if @location =0 select @location =len(@str)+1 --如果是因为没有逗号退出,则认为逗号在字符串后
  select @str_return = substring(@str,@start,@location -@start) --@start肯定是逗号之后的位置或者就是初始值1
  if (@index <> @next ) select @str_return = '' --如果二者不相等,则是因为逗号太少,或者@index小于@next的初始值1。
  return @str_return
end

3、 测试


SELECT [dbo].[getstrarrlength]('1,2,3,4,a,b,c,d')
SELECT [dbo].[getstrofindex]('1,2,3,4,a,b,c,d',5)

 

一些含数的运用。可随时查找

update test1 set shengri='19'+replace(shengri,'.','-')
select substring(shengri,3,3),

把一个时间类型字段转换成"1970-07-06"
update test1 set shengri=year(shengri)+'-'+case when len(month(shengri))=1 then '0'+convert(varchar(20),month(shengri)) else convert(varchar(20),month(shengri))
end+'-'+case when len(day(shengri))=1 then '0'+convert(varchar(20),day(shengri)) else
convert(varchar(20),day(shengri)) end 


http://www.cnblogs.com/ghd258/archive/2006/03/20/354147.html

http://www.cnblogs.com/ghd258/archive/2006/11/17/563218.html 

原创粉丝点击