1 用系统提供的时间日期函数根据身份证号校验是否给用户相应权限
declare @Birthday varchar(8),@cordno varchar(18)
set @cordno='150204198201061340'
if (len(@cordno)=15 and datediff(yyyy,substring(@cordno,7,6),getdate())>5 and datediff(yyyy,substring(@cordno,7,6),getdate())<70)
or (len(@cordno)=18 and datediff(yyyy,substring(@cordno,7,8),getdate())>5 and datediff(yyyy,substring(@cordno,7,8),getdate())<70)
 
print 1
else
print 0
2 关于图书馆不同种类图书的借阅期限及还剩几天到期
create table borrow_book
(
id int identity(1,1) primary key,
userid int,
b_date datetime default(getdate()),
b_type varchar(20),
h_date datetime
)
declare @userid int,@b_type varchar(20),@h_date datetime
set @userid=1
set @b_type='科技类'
if @b_type='科技类'
 select @h_date=dateadd(dd,45,getdate())
else if @b_type='文艺类'
select @h_date=dateadd(dd,30,getdate())
else
select @h_date=dateadd(dd,10,getdate())
insert into borrow_book(userid,b_type,h_date) values(@userid,@b_type,@h_date)
查找距归还日期还有三天的图书有哪些(两者选一即可,因为都是datetime类型,所以可以直接进行运算)
select * from borrow_book where h_date-getdate()>3
select * from borrow_book where datediff(dd,getdate(),h_date)<3
3 超市按季度统计各种商品的销售总额
――建库,建表
if object_id('Demo') is not null
drop database Demo
create database Demo
go
if object_id('ordertab') is not null
drop table ordertab
create table ordertab
(
id int identity(1,1) primary key,
itemid int,
orderdate datetime,
price money,
[count] float,
amount as price*[count]
)
――插入数据
insert into ordertab(ItemID,OrderDate,Price,[Count])
values('010087','2005-1-8',190.00,1)
insert into ordertab(ItemID,OrderDate,Price,[Count])
values('210091','2005-2-8',10.50,3)
insert into ordertab(ItemID,OrderDate,Price,[Count])
values('010087','2005-2-27',190.00,1)
insert into ordertab(ItemID,OrderDate,Price,[Count])
values('210091','2005-2-10',10.50,1)
insert into ordertab(ItemID,OrderDate,Price,[Count])
values('010107','2005-5-9',22.00,1)
insert into ordertab(ItemID,OrderDate,Price,[Count])
values('010087','2005-7-8',190.00,1)
insert into ordertab(ItemID,OrderDate,Price,[Count])
values('010107','2005-1-8',22.00,5)
insert into ordertab(ItemID,OrderDate,Price,[Count])
values('015021','2005-1-8',48.75,1)
insert into ordertab(ItemID,OrderDate,Price,[Count])
values('010087','2005-1-8',190.00,1)
insert into ordertab(ItemID,OrderDate,Price,[Count])
values('015021','2005-11-3',48.75,1)
――select * from ordertab
――select itemid,
――sum(case when datepart(q,orderdate)=1 then amount else 0 end)
――as 小计
――from ordertab group by itemid
――按季度统计各商品的销售总额
select itemid,
sum(case when datepart(q,orderdate)=1 then amount else 0 end)as 一季度,
sum(case when datepart(q,orderdate)=2 then amount else 0 end) as 二季度,
sum(case when datepart(q,orderdate)=3 then amount else 0 end)as 三季度,
sum(case when datepart(q,orderdate)=4 then amount else 0 end)as 四季度 from ordertab group by itemid
附:
1增加表约束:
if exists(select * from sys.object where name='约束名' and type='F')
alter table 表名 drop constratnts 约束名
然后就可以删除表了。
sql中的函数
(1)系统函数
A 向指定日期加上一段时间
语法:dateadd(datepart,number,date)
其中日期部分包括:yy,mm,dd,hh,mi,ss,dy,wk,ms
举例:
Declare @basicdate datetime
Set datetime=’19820130’
Select dateadd(day,21,@basicdate) as timeframe
B 日期差
 语法: datediff(datepart,startdate,enddate)
C 返回代表指定日期的指定部分的字符串
语法:String dataname(datepart,date)
D 返回代表指定日期的指定日期部分的整数
语法:int datepart(datepart date)
E 返回当前系统日期和时间
语法:datetime getdate()
F 返回代表指定日期月份的整数
Int month(date)
g 返回表示指定日期中的年份的整数
int year(date)
3        字符串函数
(1)left()
4        定义变量:declare @start
5        全局变量:标志:@@,全局变量可赋值,可改变,但不可以自己创建。
(1)@@version
版本信息
(2)@@rowcount
返回受上一语句影响的行数
例:下面的示例执行 UPDATE 语句并用 @@ROWCOUNT 来检测是否有发生更改的行。
UPDATE authors SET au_lname = 'Jones'
WHERE au_id = '999-888-7777'
IF @@ROWCOUNT = 0
   print 'Warning: No rows were updated'
说明:set nocount off时,rowcount的值不打印,默认为on,不打印,但值会改变。
(3)@@identity
返回最后插入的标识值
例:INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
SELECT @@IDENTITY AS 'Identity'
说明:set identity_insert 表名 on时,可以手动的插入标识列,默认为off
(4)@@dbcc checkident
检查指定表的当前标识值,如有必要,还对标识值进行更正
@@dbcc checkident(表名,标识列名,标识列的起始值)
(5)@@error
返回最后执行的sql语句的错误代码号
5临时表
(1)会话级临时表:#
 Select * into #table1 from student
表#table1只在一个会话域内起作用
(2)全局临时表:##
Select * into ##table1 from student
#table1在所有会话中都起作用
例:用临时表进行分页
Drop table ##table1
(
Newid int identity(1,1),
Id int
)
Insert into ##table1(id) select id from grade
Select a.* from grade a join (select id from ##table1 where newid between 5 and 10) b on a.id=b.id
 
http://blog.csdn.net/muyangquan823333/archive/2006/10/02/1317004.aspx
posted on 2007-02-24 17:18  mbskys  阅读(266)  评论(0)    收藏  举报