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

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. Linux kernel学习-内存管理

    转自:https://zohead.com/archives/linux-kernel-learning-memory-management/ 本文同步自(如浏览不正常请点击跳转):https://z ...

  2. elasticsearch集群介绍及优化【转】

    elasticsearch用于构建高可用和可扩展的系统.扩展的方式可以是购买更好的服务器(纵向扩展)或者购买更多的服务器(横向扩展),Elasticsearch能从更强大的硬件中获得更好的性能,但是纵 ...

  3. Redis使用详细教程【转】

    转自 Redis使用详细教程 - wangyuyu - 博客园http://www.cnblogs.com/wangyuyu/p/3786236.html 一.Redis基础部分: 1.redis介绍 ...

  4. window server 2008 配置ftp并实现用户隔离

    文件传输协议(FTP)是一个标准的网络协议,用于传输计算机文件从一台主机到另一台主机通过TCP为基础的网络,如互联网. -WIKI百科 好久没更新教程了, 今天更新一下博客,也不知道会不会有人看….本 ...

  5. MYSQL三种安装方式--rpm包安装

    1. 首先检查机器里是否已经存在MySQL $ rpm -qa | grep mysql 2. 去官网下载相应的rpm包:https://dev.mysql.com/downloads/mysql/ ...

  6. php 高并发解决方案(用于抢购) 转载

    最近在做一个团购项目,遇到个问题,就是在抢购.秒杀.抽奖等活动时,库存数量有限,但是同时下单人数超过了库存数量,就会导致商品超售问题.那么我们怎么来解决这个问题呢,我的思路如下: sql1:查询商品库 ...

  7. python的scrapy框架

    scrapy是python中数据抓取的框架.简单的逻辑如下所示 scrapy的结构如图所示,包括scrapy engine.scheduler.downloader.spider.item pipel ...

  8. ios app应用在显示屏幕上改中文名

    1.点击项目名 2.选Build settings 搜索 product name 3.双击,改为需要在手机上显示的应用名

  9. NVIDIA DIGITS 学习笔记(NVIDIA DIGITS-2.0 + Ubuntu 14.04 + CUDA 7.0 + cuDNN 7.0 + Caffe 0.13.0)

    转自:http://blog.csdn.net/enjoyyl/article/details/47397505?from=timeline&isappinstalled=0#10006-we ...

  10. 百度NLP二面-电话面

    实验室项目:1.实验室方向 2.用两分钟介绍自己的项目,创新点在哪里 个人项目:     1.自己实现的贝叶斯分类器,目的,怎么做的 2.怎么计算各个分类的先验.(因为我使用的训练预料是每个分类10篇 ...