sql中字符分割,日期判断,以及函数的应用
前两天公司有一个功能需求,客户给出几天的工作时间和休息,然后顾客的访问时间必须要在工作时间之内和休息时间之外,所以要求做一下判断。本来以为这个没什么,谁知道客户提供的工作时间段和休息时间段不定,给出的又不是日期格式,是串联后的文本格式,如下格式,想了一下,只能下个函数来解决,分享给其他人看看
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中字符分割,日期判断,以及函数的应用的更多相关文章
- Sql 中获取年月日时分秒的函数
getdate():获取系统当前时间 dateadd(datepart,number,date):计算在一个时间的基础上增加一个时间后的新时间值,比如:dateadd(yy,30,getdate()) ...
- SQL 中详解round(),floor(),ceiling()函数的用法和区别?
SQL 中详解round(),floor(),ceiling()函数的用法和区别? 原创 2013年06月09日 14:00:21 摘自:http://blog.csdn.net/yueliang ...
- SQL中Between查询日期时需要注意的地方
SQL中Between查询日期时需要注意的地方 某个表某个字段是Datetime型 以"YYYY-MM-DD 00:00:00" 存放 (1).例如数据 2009-01-22 ...
- 浅谈sql的字符分割
对于oracle:在字符串处理时:经常会遇到字符串分割的问题:可惜SQL中没有split函数:这个倒是挺困扰我们写sql的.对此:我来说说这字符串分割. 例如对字段str中一条数据是'120-mm-2 ...
- Sql Server系列:日期和时间函数
1. 获取系统当前日期函数GETDATE() GETDATE()函数用于返回当前数据库系统的日期和时间,返回值的类型为datetime. SELECT GETDATE() 2. 返回UTC日期的函数G ...
- Sql 中text类型字段判断是否为空
用 len关键字,字段=''会报错:数据类型 text 和 varchar 在 equal to 运算符中不兼容. 正确方法: 1. 字段 is null 2. datalength(字段)=0 注: ...
- 用于string对象中字符截取的几种函数总结——语法、参数意义及用途举例
1. charAt():返回指定位置的字符. 语法:stringObject.charAt(index) 参数意义:index 必需,指字符在字符串中的下标.需要注意的是,字符串中第一个字符的下标是 ...
- SQL中几个常用的排序函数
最近使用窗口函数的频率越来越高,这里打算简单介绍一下几个排序的函数,做一个引子希望以后这方面的问题能够更深入的理解,这里先简单介绍一下几个简单的排序函数及其相关子句,这里先从什么是排序开始吧 ...
- Js中的一个日期处理格式化函数
由于在工作中,经常需要对日期进行格式化,不像后端那样,有方便的方法可调用,可以在date的对象prototype中定义一个format方法,见如下 //日期时间原型增加格式化方法 Date.proto ...
随机推荐
- ProxySQL 排错 Max connect timeout reached while reaching hostgroup 10 after 10000ms
ProxySQL 排错 问题分析: 在ProxySQL在集群下,因未知原因导致误测到所有节点OFFLINE_HARD,并runtime_mysql_servers表清空,从而导致前端查询无法传递到后端 ...
- python requests模块手动设置cookies的几种方式
def use_cookie(self): cookies="YF-V5-G0=731b77772529a1f49eac82a9d2c2957f; SUB=_2AkMsEgief8NxqwJ ...
- 使用正则表达式匹配IP地址
IP地址分为4段,以点号分隔.要对IP地址进行匹配,首先要对其进行分析,分成如下部分,分别进行匹配: 第一步:地址分析,正则初判 1.0-9 \d 进行匹配 2.10-99 [1-9]\d 进行匹 ...
- 002利用zabbix监控某个目录大小
近期,因为JMS的消息堆积导致ApacheMQ频率故障(消息没有被消费掉,导致其数据库达到1.2G,JMS此时直接挂掉),很是郁闷!刚好自 己在研究zabbix.既然zabbix如此强大,那么它可以监 ...
- vue单选,多选,多选的内容显示在页面可删除
vue做单选只能选一个 <template> <div class="list"> <!-- 多行多列单选 --> <span>只能 ...
- 在delphi原有控件基础上画图
var C:TControlCanvas; begin C := TControlCanvas.Create; C.Pen.Color := clRed; C.Pen.Width := ; C.Con ...
- hbase学习(一)hbase简介
1.hadoop生态系统 2.hbase简介 非关系型数据库知识面扩展 cassandra.hbase.mongodb.redis couchdb,文件存储数据库 Neo4j非关系型图数据库 3.hb ...
- 初窥Linux 之 最常用20条命令
玩过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,因为我们只需要掌握我们最常用的命令就可以了.当然你也可以在使用时去找一下 ...
- 洛谷 P1184高手之在一起 题解
题目传送门 那位高手是谁啊?@jxpxcsh QWQ. 这道题数据特别水,所以直接使用O(n*m),每读进一个m内的字符串,就扫一遍n的字符串.但注意地点字符串中有可能会有空格,所以这时候就要请出g ...
- EasyUi – 5.修改$.messager.show() 弹出窗口在浏览器顶部中间出现
由于在easyui中$.messager.show() 只有一种弹出方式(在浏览器的或下角弹出),我最近在做一个项目的时候需要在浏览器的顶部中间出现.由于自己写花那么多的时间,所以就去修改了原码(不推 ...