问题二:-- 当前日期,取本月日期范围,上月日期范围,下月日期范围-- 当前日期
select getdate() 当前日期-- 上月日期范围
select
convert(varchar(7) ,dateadd(month ,-1 , getdate()),121)+ '-01' 上月起始日期,
convert(varchar(10),dateadd(day , -1 , cast(convert(varchar(7) ,getdate(),121)+ '-01' as datetime)) ,120)-- 取本月日期范围(方法一)
select
convert(varchar(7) ,getdate(),120)+ '-01' 本月起始日期,
convert(varchar(10),dateadd(day , -1 , cast(convert(varchar(7) ,dateadd(month , 1 , getdate()),120)+ '-01' as datetime)),120)-- 取本月日期范围(方法二)
declare @dt datetime
set @dt=getdate()
--set @dt='2006-8-8'
SELECT 32-Day(@dt+32-Day(@dt))-- 下月日期范围
select
convert(varchar(10),cast(convert(varchar(7),dateadd(month , 1 , getdate()),120)+ '-01' as datetime),120) as 下月起始日期,
convert(varchar(10),dateadd(day , -1 , cast(convert(varchar(7) ,dateadd(month , 2 , getdate()),120)+ '-01' as datetime)),120)
select getdate() 当前日期-- 上月日期范围
select
convert(varchar(7) ,dateadd(month ,-1 , getdate()),121)+ '-01' 上月起始日期,
convert(varchar(10),dateadd(day , -1 , cast(convert(varchar(7) ,getdate(),121)+ '-01' as datetime)) ,120)-- 取本月日期范围(方法一)
select
convert(varchar(7) ,getdate(),120)+ '-01' 本月起始日期,
convert(varchar(10),dateadd(day , -1 , cast(convert(varchar(7) ,dateadd(month , 1 , getdate()),120)+ '-01' as datetime)),120)-- 取本月日期范围(方法二)
declare @dt datetime
set @dt=getdate()
--set @dt='2006-8-8'
SELECT 32-Day(@dt+32-Day(@dt))-- 下月日期范围
select
convert(varchar(10),cast(convert(varchar(7),dateadd(month , 1 , getdate()),120)+ '-01' as datetime),120) as 下月起始日期,
convert(varchar(10),dateadd(day , -1 , cast(convert(varchar(7) ,dateadd(month , 2 , getdate()),120)+ '-01' as datetime)),120)
DAY
(
DATEADD
(
ms, - 3,DATEADD(mm, DATEDIFF(m, 0, GETDATE()) + 1, 0)
)
) AS 每月天数
GO------create function f_getmaxday(@date datetime)
returns int
as
begin
declare @day int
select
@day=case when month(@date) in (1,3,5,7,8,10,12) then 31
when month(@date) in (4,6,9,11) then 30
else
case
when year(@date)%400=0 or (year(@date)%100!=0 and year(@date)%4=0) then 29
else 28
end
end
return @day
end
go--示例:
select dbo.f_getmaxday('2006-08-01') AS 每月天数
godrop function f_getmaxday
go
其中ZD_RY.KSBM意为科室编码,对应ZD_KSBM ,列出各科室的BM,MC,
以及对应科室的人数。你的对应有错吧,应为'其中ZD_RY.KSBM意为科室编码,对应ZD_BM'
select a.bm , a.mc , b.人数
from ZD_KS a ,
(select KSBM , count(*) as 人数 from ZD_RY group by ksbm) b
where a.bm = b.ksbm-------------------------------------------------------------------
问题2:找出当月的天数
select DATEPART(month , getdate()) as 目前月份 , DATEDIFF(dd,getdate(),DATEADD(mm, 1, getdate())) as 当月天数
--结果
目前月份 当月天数
----------- -----------
11 30
(所影响的行数为 1 行)---------------------------------------------------------------------
问题3:使用一条SQL语句完成:有一个表中列出了图书代码(BOOKID)及单价(PRICE),要求查询结果为:如果PRICE 在10-20 元,返回单价;为NULL时,返回值为‘未知’;为其他值返回‘其他’。如下表所示:
BOOKID PRICE 返回值
1 10 10
2 NULL 未知
3 25 其他create table t(BOOKID int,PRICE int)
insert into t(bookid,price) values(1,10)
insert into t(bookid,price) values(2,null)
insert into t(bookid,price) values(3,25)
go
select bookid,price,返回值=
CASE
WHEN price >= 10 and price <= 20 THEN cast(price as varchar(10))
WHEN price is null THEN '未知'
ELSE '其他'
END
from t
drop table t
--结果
bookid price 返回值
----------- ----------- ----------
1 10 10
2 NULL 未知
3 25 其他
(所影响的行数为 3 行)-------------------------------------------------------------------
问题4:使用一条SQL语句找到重复的值及重复的次数:有一数据表ZD_ks,其中有字段BM,MC,,请查询出在ZD_ks中BM有重复的值及重复的次数,没有的不要列出。如下表:
BM DUPCOUNT
001 3
002 2create table ZD_ks(BM varchar(10),mc varchar(10),age int)
insert into ZD_ks(bm,mc,age) values('001','张三',1)
insert into ZD_ks(bm,mc,age) values('001','李四',2)
insert into ZD_ks(bm,mc,age) values('001','王五',3)
insert into ZD_ks(bm,mc,age) values('002','赵六',1)
insert into ZD_ks(bm,mc,age) values('002','钱七',2)
insert into ZD_ks(bm,mc,age) values('003','孙八',1)
go
select BM,count(*) as DUPCOUNT from zd_ks group by bm having count(*) > 1
drop table zd_ks
--结果
BM DUPCOUNT
---------- -----------
001 3
002 2
(所影响的行数为 2 行)------------------------------------------------------------------
问题5:有一个表(表名:ZD_KS 其中有字段BM,MC),要求查询出MC及记录的顺序号,如下表:
序号 MC
1 内一
2 内二
3 外一
4 外二
5 骨外
这个确实变态,不同的排序有不同的顺序号。这是不排序的情况.如果对某个字段排序后,序号就不同了。
create table ZD_ks(BM varchar(10),mc varchar(10))
insert into ZD_ks(bm,mc) values('001','内一')
insert into ZD_ks(bm,mc) values('001','内二')
insert into ZD_ks(bm,mc) values('001','外一')
insert into ZD_ks(bm,mc) values('002','外二')
insert into ZD_ks(bm,mc) values('002','骨外')
go
select id=identity(int,1,1) , * into test from zd_ks
select id,mc from test
drop table zd_ks
drop table test
--结果
id mc
----------- ----------
1 内一
2 内二
3 外一
4 外二
5 骨外
(所影响的行数为 5 行)-----------------------------------------------------------------------
问题6:两个表,收费表MZ_SF(SFID INT,STATE INT);
处方明细表MZ_CF(SFID INT, YZBM varchar(10)),
其中MZ_SF.STATE的意义如下:bit0:=0正常数据;=1;
退款数据;bit4:=0;门诊挂号处收费记录;=1;
门诊收费处收费记录;要求查询出门诊收费的收费已退款的处方明细。MZ_SF.STATE的意义没看懂,如果有具体数据好办了。------------------------------------------------------------------------
问题7:在数据库维护中,备份有几种模式,比如我们最常用的完全备份??
它们有什么区别???
这个自己看书。
处方明细表MZ_CF(SFID INT, YZBM varchar(10)),
其中MZ_SF.STATE的意义如下:bit0:=0正常数据;=1;
退款数据;bit4:=0;门诊挂号处收费记录;=1;
门诊收费处收费记录;要求查询出门诊收费的收费已退款的处方明细。MZ_SF.STATE的意义是:它有四种情况,分别为;bit0:=0正常数据
bit0:=1退款数据
bit4:=0;门诊挂号处收费记录
bit4:=1 门诊收费处收费记录 现要求查询出出门诊收费的收费已退款的处方明细.