前两天公司有一个功能需求,客户给出几天的工作时间和休息,然后顾客的访问时间必须要在工作时间之内和休息时间之外,所以要求做一下判断。本来以为这个没什么,谁知道客户提供的工作时间段和休息时间段不定,给出的又不是日期格式,是串联后的文本格式,如下格式,想了一下,只能下个函数来解决,分享给其他人看看

GO
/****** Object: UserDefinedFunction [dbo].[CheckDate] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO ---@day:上班时间段 @dayX:休息时间段 @NowTime:具体的进店时间(分钟为单位)
ALTER function [dbo].[CheckDate](@day nvarchar(1000),@dayX nvarchar(1000),@NowTime int)
RETURNS varchar(100)
as
begin declare @start1 int --第一个工作开始时间
declare @start2 int --第二个工作开始时间
declare @start3 int --第三个工作开始时间
declare @end1 int --第一个工作结束时间
declare @end2 int --第二个工作结束时间
declare @end3 int --第三个工作结束时间
set @start1=0
set @start2=0
set @start3=0
set @end1=0
set @end2=0
set @end3=0 declare @Xstart1 int --第一个休息开始时间
declare @Xstart2 int --第二个休息开始时间
declare @Xstart3 int --第三个休息开始时间
declare @Xend1 int --第一个休息结束时间
declare @Xend2 int --第一个休息结束时间
declare @Xend3 int --第一个休息结束时间
set @Xstart1=0
set @Xstart2=0
set @Xstart3=0
set @Xend1=0
set @Xend2=0
set @Xend3=0 declare @jieguo varchar(100) --返回的结果 是:表示正确 否:表示错误
declare @Time nvarchar(1000) --保存分割后的每个时间段 --declare @day nvarchar(1000)
--declare @dayX nvarchar(1000)
--declare @NowTime int
--set @day='11:00-13:00$17:00-19:00'
--set @dayX='12:00-14:00'
--set @NowTime=120 if(len(@day)>0)
begin ------------------------------if----------------------------
if(charindex('$',@day)>0)
begin
set @Time=left(@day,charindex('$',@day)-1)
set @start1= datepart(hh,left(@Time,charindex('-',@Time)-1))*60+datepart(n,left(@Time,charindex('-',@Time)-1))
set @end1= datepart(hh,right(@Time,len(@Time)-charindex('-',@Time)))*60+datepart(n,right(@Time,len(@Time)-charindex('-',@Time)))
set @day=right(@day,len(@day)-charindex('$',@day))
--print @Time print @start1 print @end1 print @day
end
------------------------------end if---------------------------- ------------------------------else----------------------------
else
begin
set @Time=@day
set @start1= datepart(hh,left(@Time,charindex('-',@Time)-1))*60+datepart(n,left(@Time,charindex('-',@Time)-1))
set @end1= datepart(hh,right(@Time,len(@Time)-charindex('-',@Time)))*60+datepart(n,right(@Time,len(@Time)-charindex('-',@Time)))
set @day=''
--print @Time print @start1 print @end1 print @day
end
------------------------------end else ----------------------------
end
------------------------------ end if(len(@day>0))---------------------------- if(len(@day)>0)
begin
------------------------------if----------------------------
if(charindex('$',@day)>0)
begin
set @Time=left(@day,charindex('$',@day)-1)
set @start2= datepart(hh,left(@Time,charindex('-',@Time)-1))*60+datepart(n,left(@Time,charindex('-',@Time)-1))
set @end2= datepart(hh,right(@Time,len(@Time)-charindex('-',@Time)))*60+datepart(n,right(@Time,len(@Time)-charindex('-',@Time)))
set @day=right(@day,len(@day)-charindex('$',@day))
--print @Time print @start2 print @end2 print @day
end
------------------------------end if---------------------------- ------------------------------else----------------------------
else begin
set @Time=@day
set @start2= datepart(hh,left(@Time,charindex('-',@Time)-1))*60+datepart(n,left(@Time,charindex('-',@Time)-1))
set @end2= datepart(hh,right(@Time,len(@Time)-charindex('-',@Time)))*60+datepart(n,right(@Time,len(@Time)-charindex('-',@Time)))
set @day=''
--print @Time print @start2 print @end2 print @day
end
------------------------------end else ---------------------------- end
------------------------------end if(len(@day>0))---------------------------- if(len(@day)>0)
begin
------------------------------if----------------------------
if(charindex('$',@day)>0)
begin
set @Time=left(@day,charindex('$',@day)-1)
set @start3= datepart(hh,left(@Time,charindex('-',@Time)-1))*60+datepart(n,left(@Time,charindex('-',@Time)-1))
set @end3= datepart(hh,right(@Time,len(@Time)-charindex('-',@Time)))*60+datepart(n,right(@Time,len(@Time)-charindex('-',@Time)))
set @day=right(@day,len(@day)-charindex('$',@day))
--print @Time print @start3 print @end3 print @day
end
------------------------------end if---------------------------- ------------------------------else----------------------------
else begin
set @Time=@day
set @start3= datepart(hh,left(@Time,charindex('-',@Time)-1))*60+datepart(n,left(@Time,charindex('-',@Time)-1))
set @end3= datepart(hh,right(@Time,len(@Time)-charindex('-',@Time)))*60+datepart(n,right(@Time,len(@Time)-charindex('-',@Time)))
set @day=''
--print @Time print @start3 print @end3 print @day
end
------------------------------end else ---------------------------- end
------------------------------end if(len(@day)>0)---------------------------- if(len(@dayX)>0)
begin ------------------------------if----------------------------
if(charindex('$',@dayX)>0)
begin
set @Time=left(@dayX,charindex('$',@dayX)-1)
set @Xstart1= datepart(hh,left(@Time,charindex('-',@Time)-1))*60+datepart(n,left(@Time,charindex('-',@Time)-1))
set @Xend1= datepart(hh,right(@Time,len(@Time)-charindex('-',@Time)))*60+datepart(n,right(@Time,len(@Time)-charindex('-',@Time)))
set @dayX=right(@dayX,len(@dayX)-charindex('$',@dayX))
--print @Time print @Xstart1 print @Xend1 print @dayX
end
------------------------------end if---------------------------- ------------------------------else----------------------------
else
begin
set @Time=@dayX
set @Xstart1= datepart(hh,left(@Time,charindex('-',@Time)-1))*60+datepart(n,left(@Time,charindex('-',@Time)-1))
set @Xend1= datepart(hh,right(@Time,len(@Time)-charindex('-',@Time)))*60+datepart(n,right(@Time,len(@Time)-charindex('-',@Time)))
set @dayX=''
--print @Time print @Xstart1 print @Xend1 print @dayX
end
------------------------------end else ----------------------------
end
------------------------------ end if(len(@dayX>0))---------------------------- if(len(@dayX)>0)
begin
------------------------------if----------------------------
if(charindex('$',@dayX)>0)
begin
set @Time=left(@dayX,charindex('$',@dayX)-1)
set @Xstart2= datepart(hh,left(@Time,charindex('-',@Time)-1))*60+datepart(n,left(@Time,charindex('-',@Time)-1))
set @Xend2= datepart(hh,right(@Time,len(@Time)-charindex('-',@Time)))*60+datepart(n,right(@Time,len(@Time)-charindex('-',@Time)))
set @dayX=right(@dayX,len(@dayX)-charindex('$',@dayX))
--print @Time print @Xstart2 print @Xend2 print @dayX
end
------------------------------end if---------------------------- ------------------------------else----------------------------
else begin
set @Time=@dayX
set @Xstart2= datepart(hh,left(@Time,charindex('-',@Time)-1))*60+datepart(n,left(@Time,charindex('-',@Time)-1))
set @Xend2= datepart(hh,right(@Time,len(@Time)-charindex('-',@Time)))*60+datepart(n,right(@Time,len(@Time)-charindex('-',@Time)))
set @dayX=''
--print @Time print @Xstart2 print @Xend2 print @dayX
end
------------------------------end else ---------------------------- end
------------------------------end if(len(@dayX>0))---------------------------- if(len(@dayX)>0)
begin
------------------------------if----------------------------
if(charindex('$',@dayX)>0)
begin
set @Time=left(@dayX,charindex('$',@dayX)-1)
set @start3= datepart(hh,left(@Time,charindex('-',@Time)-1))*60+datepart(n,left(@Time,charindex('-',@Time)-1))
set @Xend3= datepart(hh,right(@Time,len(@Time)-charindex('-',@Time)))*60+datepart(n,right(@Time,len(@Time)-charindex('-',@Time)))
set @dayX=right(@dayX,len(@dayX)-charindex('$',@dayX))
--print @Time print @Xstart3 print @Xend3 print @dayX
end
------------------------------end if---------------------------- ------------------------------else----------------------------
else begin
set @Time=@dayX
set @Xstart3= datepart(hh,left(@Time,charindex('-',@Time)-1))*60+datepart(n,left(@Time,charindex('-',@Time)-1))
set @Xend3= datepart(hh,right(@Time,len(@Time)-charindex('-',@Time)))*60+datepart(n,right(@Time,len(@Time)-charindex('-',@Time)))
set @dayX=''
--print @Time print @Xstart3 print @Xend3 print @dayX
end
------------------------------end else ---------------------------- end
------------------------------end if(len(@dayX)>0)---------------------------- if((@NowTime>@Xstart1 and @NowTime<@Xend1) or (@NowTime>@Xstart2 and @NowTime<@Xend2) or (@NowTime>@Xstart3 and @NowTime<@Xend3) )
set @jieguo='否'
else if((@NowTime>@start1 and @NowTime<@end1) or (@NowTime>@start2 and @NowTime<@end2) or (@NowTime>@start3 and @NowTime<@end3))
set @jieguo='是'
else set @jieguo='否' return @jieguo
end

自己的IQ比较差,也希望有高手指教另一种思路。

sql中字符分割,日期判断,以及函数的应用的更多相关文章

  1. Sql 中获取年月日时分秒的函数

    getdate():获取系统当前时间 dateadd(datepart,number,date):计算在一个时间的基础上增加一个时间后的新时间值,比如:dateadd(yy,30,getdate()) ...

  2. SQL 中详解round(),floor(),ceiling()函数的用法和区别?

    SQL 中详解round(),floor(),ceiling()函数的用法和区别? 原创 2013年06月09日 14:00:21   摘自:http://blog.csdn.net/yueliang ...

  3. SQL中Between查询日期时需要注意的地方

    SQL中Between查询日期时需要注意的地方   某个表某个字段是Datetime型 以"YYYY-MM-DD 00:00:00" 存放 (1).例如数据 2009-01-22 ...

  4. 浅谈sql的字符分割

    对于oracle:在字符串处理时:经常会遇到字符串分割的问题:可惜SQL中没有split函数:这个倒是挺困扰我们写sql的.对此:我来说说这字符串分割. 例如对字段str中一条数据是'120-mm-2 ...

  5. Sql Server系列:日期和时间函数

    1. 获取系统当前日期函数GETDATE() GETDATE()函数用于返回当前数据库系统的日期和时间,返回值的类型为datetime. SELECT GETDATE() 2. 返回UTC日期的函数G ...

  6. Sql 中text类型字段判断是否为空

    用 len关键字,字段=''会报错:数据类型 text 和 varchar 在 equal to 运算符中不兼容. 正确方法: 1. 字段 is null 2. datalength(字段)=0 注: ...

  7. 用于string对象中字符截取的几种函数总结——语法、参数意义及用途举例

    1. charAt():返回指定位置的字符. 语法:stringObject.charAt(index) 参数意义:index  必需,指字符在字符串中的下标.需要注意的是,字符串中第一个字符的下标是 ...

  8. SQL中几个常用的排序函数

         最近使用窗口函数的频率越来越高,这里打算简单介绍一下几个排序的函数,做一个引子希望以后这方面的问题能够更深入的理解,这里先简单介绍一下几个简单的排序函数及其相关子句,这里先从什么是排序开始吧 ...

  9. Js中的一个日期处理格式化函数

    由于在工作中,经常需要对日期进行格式化,不像后端那样,有方便的方法可调用,可以在date的对象prototype中定义一个format方法,见如下 //日期时间原型增加格式化方法 Date.proto ...

随机推荐

  1. 017 CPU冲高定位方法

    1.通过top命令查看cpu占用高的进程ID; 2.通过top -Hp 进程ID 查看该进程下所有线程占用cpu的情况,拿出占用cpu最高的线程ID,换算成十六进制; 3.通过 jstack 进程ID ...

  2. 苹果容器超出内容overflow滑动卡顿问题

    -webkit-overflow-scrolling:touch; 就这么一段代码,加载需要滚动的容器css样式中.因为苹果的硬件加速产生的后果....

  3. BootStrap的栅格系统的基本写法(布局)

    代码如下: <!DOCTYPE html> <html> <head> <title>BootStrap的基础入门</title> < ...

  4. 20165301 2017-2018-2 《Java程序设计》第六周学习总结

    20165301 2017-2018-2 <Java程序设计>第六周学习总结 教材学习内容总结 第七章:常用实类 String类 构造String对象 常量对象 String对象 Stri ...

  5. 洛谷P1094纪念品分组 题解

    题目传送门 首先的思路就是贪心.先将所有的纪念品按照价格从低到高进行排序.在分别从左到右.从右到左合并纪念品.如果两端纪念品价格超过了上上限,那么就将较大的那一个纪念品独自放入.否则将两个纪念品一起放 ...

  6. **CodeIgniter通过hook的方式实现简单的权限控制

    根据自己的实际情况,需要两个文件,一个是权限控制类,Acl,另外一个是权限配置的文件acl.php放在了config这个目录下. Acl这个类放在了application/hook/acl.php.通 ...

  7. pymongo的一些操作

    参考:http://www.yiibai.com/mongodb/mongodb_drop_collection.html http://www.cnblogs.com/zhouxuchen/p/55 ...

  8. LR11中自定义函数web_custom_request请求

    Action() { char * ip,temp; int state; double time_elapsed, duration, waste; merc_timer_handle_t time ...

  9. lr回放Warning -26601报错的解决方法

    问题现象: Action2.c(30): Error -26601: Decompression function  (wgzMemDecompressBuffer) failed, return c ...

  10. openssl解析国密X509证书

    openssl解析国密X509证书,把公钥拿出来重写一下就行了        x = strToX509(pbCert, pulCertLen);dwRet = getCertPubKey(x, &a ...