sql server 当前时间属于哪个区间问题

题:一天24小时不同时间段,电的单价不同,即电价高平谷:

高峰:9:00-12:00、19:00-22:00                                      电单价 :1.5元每度电

平峰:8:00-9:00、12:00-19:00、22:00-24:00                   电单价 :1.0元每度电

谷峰:0:00-08:00                                                            电单价 :0.8元每度电

程序每办个小时执行一次存储过程,存储过程判断当前时间属于电价高平谷的sql如下:

 declare @currentDateTime datetime;
          declare @currentHour float;
          declare @currentMinute float;
          declare @ElectricityUnitPrice  numeric(18, 2); --电单价

          declare @Clock0 datetime;
          declare @Clock8 datetime;
          declare @Clock9 datetime;
          declare @Clock12 datetime;
          declare @Clock19 datetime;
          declare @Clock22 datetime;
          declare @Clock24 datetime;

          set @currentDateTime=GETDATE();
          set @currentHour=DATEPART(hour,@currentDateTime)  --获取当前时间小时部分
          set @currentMinute=DATEPART(MINUTE,@currentDateTime)

          set @Clock0=Convert(datetime,convert(varchar(10),@currentDateTime,120)+‘ 00:00:000‘);
          set @Clock8=Convert(datetime,convert(varchar(10),@currentDateTime,120)+‘ 8:00:000‘);
          set @Clock9=Convert(datetime,convert(varchar(10),@currentDateTime,120)+‘ 9:00:000‘);
          set @Clock12=Convert(datetime,convert(varchar(10),@currentDateTime,120)+‘ 12:00:000‘);
          set @Clock19=Convert(datetime,convert(varchar(10),@currentDateTime,120)+‘ 19:00:000‘);
          set @Clock22=Convert(datetime,convert(varchar(10),@currentDateTime,120)+‘ 22:00:000‘);
          set @Clock24=Convert(datetime,convert(varchar(10),@currentDateTime,120)+‘ 23:59:000‘);

          if (@currentHour=0) and (@currentMinute=0)  --小时、分钟都为零,即为24点,平峰结束时刻
            begin
               set @ElectricityUnitPrice=1.0; --平峰电价
            end

         else --不是24点
           begin
            if(@currentHour!=0) and  (@currentMinute=0)  --xxx点整
             begin
               set @currentDateTime=dateadd(minute,-30,@currentDateTime); --临界点的区间等于前半个小时所在的区间
             end

              if (@Clock0<@currentHour and @currentHour<@Clock8)
                   begin
                     set @ElectricityUnitPrice=0.8; --谷峰电价
                   end
             else if(@Clock8<@currentHour and @currentHour<@Clock9)
                 or (@Clock12<@currentHour and @currentHour<@Clock19)
                 or (@Clock22<@currentHour and @currentHour<@Clock24)
                 begin
                    set @ElectricityUnitPrice=1; --平峰电价
                 end
             else if(@Clock9<@currentHour and @currentHour<@Clock12)
                   or(@Clock19<@currentHour and @currentHour<@Clock22)
                 begin
                   set @ElectricityUnitPrice=1.5; --高峰电价
                 end
             else
               begin
                 --脚本无错的话,不会执行到这一步
                 set @ElectricityUnitPrice=-1;
               end
          end
时间: 2024-10-07 19:01:51

sql server 当前时间属于哪个区间问题的相关文章

MS SQL Server带有时间的记录怎样查询

原文:MS SQL Server带有时间的记录怎样查询 比如某一张表[A]有一个保存日期包含时间字段[B],如果以这个段[B]作查询条件对数据记录进行查询.也我们得花些心思才能查询到我们想得到的记录. 现在我们需要查询这天2014-06-21的所有记录: SELECT * FROM [A] WHERE [B] = '2014-06-21' 上面的语法,将查询不到任何记录.也许会有网友想到使用BETWEEN: SELECT * FROM [A] WHERE [B] BETWEEN '2014-06

sql server日期时间转字符串

转自:http://www.cnblogs.com/zhangq723/archive/2011/02/16/1956152.html 一.sql server日期时间函数Sql Server中的日期与时间函数 1.  当前系统日期.时间     select getdate()  2. dateadd  在向指定日期加上一段时间的基础上,返回新的 datetime 值   例如:向日期加上2天    select dateadd(day,2,'2004-10-15')  --返回:2004-1

SQL Server 日期时间转字符串

一.sql server日期时间函数 Sql Server中的日期与时间函数 1.  当前系统日期.时间     select getdate() 2. dateadd  在向指定日期加上一段时间的基础上,返回新的 datetime 值    例如:向日期加上2天    select dateadd(day,2,'2004-10-15')  --返回:2004-10-17 00:00:00.000 3. datediff 返回跨两个指定日期的日期和时间边界数.    select datedif

SQL Server 系统时间

getdate()函数:取得系统当前的日期和时间.返回值为datetime类型的. 用法:getdate() 例子: select getdate() as dte,dateadd(day,-1,getdate()) as nowdat datepart()函数:以整数的形式返回时间的指定部分. 用法:datepart(datepart,date) 参数说明:datepart时要返回的时间的部分,常用取值year.month.day.hour.minute.second date是所指定的时间.

SQL Server日期时间格式转换字符串详解

1.日期时间转字符串 Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006  10:57AMSelect CONVERT(varchar(100), GETDATE(), 1): 05/16/06Select  CONVERT(varchar(100), GETDATE(), 2): 06.05.16Select CONVERT(varchar(100),  GETDATE(), 3): 16/05/06Select CONVERT(var

Sql Server 日期时间格式转换

日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-02-01 08:02 CONVERT(varchar(10), 时间一, 23) 结果:2007-02-01 语句及查询结果:Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect CONVERT(varchar(100), GETDATE(), 1): 05/16/06Select CONVERT(var

SQL Server日期时间函数

日期时间函数 1.获取当前日期GetDate getdate()函数以datetime数据类型的格式返回当前SQLServer服务器所在计算机的日期和时间.其语法格式为getdate().返回值舍入到最近的秒小数部分,精度为.333秒数据库十七偏移量不包含在内. 示例: select getdate() --输出 2013-03-09 15:16:00.570 2.GetUTCDate 获取UTC时间值 select GETUTCDATE() -- 2013-06-18 08:02:53.253

SQL Server中时间格式转换函数convert()的使用

convert(varchar(10),字段名,转换格式) CONVERT为日期转换函数,一般就是在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)相互转换的时候才用到:函数的3个参数:第1个参数为转换后的大:第2个为转换日期的字段或函数:第3个为转换的格式. 具体例子: SELECT CONVERT(varchar(100), GETDATE(), 0): 05 16 2011 10:57AM SELECT CONV

SQL Server 判定时间是否在某个时间区间内

IF EXISTS(SELECT TOP 1 * FROM sys.objects WHERE name=N'uF_IsRange_Date' AND [type]='FN') DROP FUNCTION uF_IsRange_Date GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: hehai -- Create dat