如何嵌套一个记录两个字段的判断

山书生 2011-09-21 07:34:02
--表zhiyeduty结构
item int
weekno varchar
begintime varchar
endtime varchar
timetype varchar
timedescribe varchar
markchar varchar

--表zhiyeduty数据
--insert zhiyeduty(weekno,begintime,endtime,timetype,timedescribe) values('1','08:00:00','08:08:08','99','test duty time')
item weekno begintime endtime timetype timedescribe markchar
3 1 08:00:00 08:08:08 99 test duty time NULL
2 0 08:30:00 17:30:00 10 default duty time NULL

--存储过程
--CREATE PROCEDURE sp_hw_zhiyeduty
@cp_time VARCHAR(8), --参数传入值无效,在存做了CONVERT getdate() 108赋值
@cp_return TINYINT OUTPUT
AS
BEGIN
SET @cp_time = CONVERT(VARCHAR(8),getdate(),108)
--SET @cp_time = '06:06:06' --for test
IF EXISTS (SELECT 1 FROM zhiyeduty WHERE begintime < @cp_time and endtime > @cp_time )
SET @cp_return = 1 --上班时间
ELSE
SET @cp_return = 2 --非上班时间
END
GO

--

declare @outcode1 TINYINT, @outcode2 TINYINT
exec sp_hw_zhiyeduty '08:07:06', @outcode1 output
select @outcode1 --1
exec sp_hw_zhiyeduty '08:09:10', @outcode2 output
select @outcode2 --1----如何构建sp IF EXISTS获取@outcode2为2非上班时间??????
...全文
218 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
山书生 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 geniuswjt 的回复:]

BEGIN
SET @cp_time = CONVERT(VARCHAR(8),getdate(),108)
--SET @cp_time = '06:06:06' --for test
IF EXISTS (SELECT 1 FROM zhiyeduty WHERE begintime < @cp_time and endtime > @cp_ti……
[/Quote]
faint~~~~我说……
谢谢各位。
geniuswjt 2011-09-22
  • 打赏
  • 举报
回复
BEGIN
SET @cp_time = CONVERT(VARCHAR(8),getdate(),108)
--SET @cp_time = '06:06:06' --for test
IF EXISTS (SELECT 1 FROM zhiyeduty WHERE begintime < @cp_time and endtime > @cp_time )
SET @cp_return = 1 --上班时间
ELSE
SET @cp_return = 2 --非上班时间
END

你这句红色的导致传入的@cp_time都废了,永远是你的当前时间!我勒个去!
geniuswjt 2011-09-22
  • 打赏
  • 举报
回复
md,我看明白了
gogodiy 2011-09-22
  • 打赏
  • 举报
回复
你还不如给出数据,并给出你要的结构。
山书生 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 geniuswjt 的回复:]

IF EXISTS (SELECT 1 FROM zhiyeduty WHERE item=2 and begintime < @cp_time and endtime > @cp_time )
SET @cp_return = 1 --上班时间
ELSE
SET @cp_return = 2 --非上班时间
[/Quote]
要检索整个表的各条记录,如果不同时满足各时间段则是非上班时间,不能指定item=2呢。
不知该怎么建立这样的存储过程(关键就那if exists里的查询语句)。
山书生 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 acherat 的回复:]

说真的,真的,真的没明白意思。
[/Quote]
就是想执行存储过程获得@outcode2是非上班时间,该时间08:09:10不在表所列的时间段交集中。
exec sp_hw_zhiyeduty '08:09:10', @outcode2 output
-晴天 2011-09-21
  • 打赏
  • 举报
回复
是这个意思么:
create table zhiyeduty(
item int identity(1,1),
weekno varchar(20),
begintime varchar(10),
endtime varchar(10),
timetype varchar(10),
timedescribe varchar(20),
markchar varchar(10)
)
insert zhiyeduty(weekno,begintime,endtime,timetype,timedescribe) values('1','08:00:00','08:08:08','99','test duty time')
insert zhiyeduty(weekno,begintime,endtime,timetype,timedescribe) values('0','08:30:00','17:30:00','10','default duty time')
go
create function sp_hw(@begintime varchar(10),@endtime varchar(10),@cp_time varchar(10))
returns nvarchar(10)
as
begin
if @cp_time>=@begintime and @cp_time<=@endtime
return '上班时间'
else
return '非上班时间'
return 0
end
go
select weekno,timetype,timedescribe,dbo.sp_hw(begintime,endtime,'16:06:06') as say from zhiyeduty
/*
weekno timetype timedescribe say
-------------------- ---------- -------------------- ----------
1 99 test duty time 非上班时间
0 10 default duty time 上班时间

(2 行受影响)

*/
go
drop function dbo.sp_hw
drop table zhiyeduty
--小F-- 2011-09-21
  • 打赏
  • 举报
回复
什么意思 在哪里构建??
geniuswjt 2011-09-21
  • 打赏
  • 举报
回复
IF EXISTS (SELECT 1 FROM zhiyeduty WHERE item=2 and begintime < @cp_time and endtime > @cp_time )
SET @cp_return = 1 --上班时间
ELSE
SET @cp_return = 2 --非上班时间
AcHerat 元老 2011-09-21
  • 打赏
  • 举报
回复
说真的,真的,真的没明白意思。

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧