SQLSERVER--一些经典问题总结
2007-04-01 01:04:06
大中小
/**********************************/
--获得某一天所在年的第一天
declare @a datetime,@b datetime,@sum int,@num int,@res varchar(20)
select @a='1-6-1968'
select @b='2006-4-8'
select @sum=year(@a)
select @res=ltrim(cast(@sum as varchar(20)))+'-1-1'
print @res
/*********************************/
--获得某一天所在月的最后一天
declare @a datetime,@b int,@c int,@res varchar(20)
select @a='2569-8-31'
select @b=month(dateadd(month,1,@a))
select @c=year(@a)
select @res=dateadd(day,-1,cast(@c as varchar(5))+'-'+cast(@b as varchar(20))+'-1')
print @res
/*********************************/
--获得某一天所在年的最后一天
declare @a datetime,@b int,@res varchar(20)
select @a='2026-1-5'
select @b=year(@a)+1
select @res=dateadd(day,-1,cast(@b as varchar(20))+'-1-1')
print @res
/*********************************/
/*返回当前年的最后一天*/
select dateadd(year,datediff(year,'1900-12-31',getdate()),'1900-12-31')
/*返回当月的最后一天*/
declare @a int,@b int,@c varchar(123)
select @a=datepart(year,dateadd(month,1,getdate()))
select @b=datepart(month,dateadd(month,1,getdate()))
select @c=str(@a)+'-'+ltrim(str(@b))+'-1'
print dateadd(day,datediff(day,'1900-1-1',@c)-1,'1900-1-1')
/*打印所有字母*/
if exists (select name from sysobjects where name='ff' and type='fn')
drop function ff
go
create function ff(@a varchar(20),@b int)
returns varchar(20)
as
begin
declare @res varchar(20)
select @res=substring(@a,@b,1)
return @res
end
--先写个函数获得对应位的字符,再打印
declare @a varchar(20),@i int,@len int
select @a='asdfgh'
select @len=len(@a)
select @i=1
while (@i<@len)
begin
print dbo.ff(@a,@i)
select @i=@i+1
end
/******************************************************************/
/******************************************************************************/
/******************************************************************************/
如何在一个没有主键的表中获取第n行数据,在sql2005中可以用row_number,但是必须指定排序列,否则你就不得不用select into来过渡到临时表并增加一个排序字段。
用游标的fetch absolute语句可以获取绝对行数下的某行数据,测试代码如下:
set nocount on
--建立测试环境并插入数据,并且表没有主键
create table t ......