日期:2014-05-17  浏览次数:20867 次

SQL技术实现,超级复杂,需要大牛



传入SQL中的值是 01点;02点;04点;05点;07点;点;12点;23点;09点;10点;21点;19点;

每天执行的时间点,表示方法
从每天0到23点排序为000000000111011111100000
,0表示这个时间点不执行,1表示执行.
大牛有办法解决吗?

传入的只是一个值,需要在SQL中拆分等
值如下传入SQL中的值是 01点;02点;04点;05点;07点;点;12点;23点;09点;10点;21点;19点;

------解决方案--------------------

drop table #tb
declare @str char(24),@string nvarchar(100)
set @str = '000000000111011111100000'
set @string = '1点,2点,5点,6点,8点,18点,13点,24点'

create table #tb(id int identity(1,1),val char(1))
while(LEN(@str) > 0)
begin
insert into #tb select SUBSTRING(@str,1,1)
set @str = SUBSTRING(@str,2,len(@str)-1)
end

declare @hour int,@hourVal char(1)
set @string = REPLACE(@string,'点','')

while(LEN(@string) > 0)
begin
if CHARINDEX(',',@string) = 0
set @string = @string + ','
set @hour = REPLACE(SUBSTRING(@string,1,CHARINDEX(',',@string)),',','')

select @hourVal = val from #tb where id = @hour

if @hourVal = '1'
print CONVERT(varchar(10),@hour)+'点需要执行'
else
print CONVERT(varchar(10),@hour)+'点不需要执行'

set @string = SUBSTRING(@string,LEN(@hour)+2,LEN(@string)-1)

end