Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 基于一天中的时间的查询值_Sql Server 2005_Tsql_Datetime_Time - Fatal编程技术网

Sql server 2005 基于一天中的时间的查询值

Sql server 2005 基于一天中的时间的查询值,sql-server-2005,tsql,datetime,time,Sql Server 2005,Tsql,Datetime,Time,我正在尝试查询具有以下架构的表: CREATE TABLE [dbo].[FIN_MeetingDisplay-DefaultConfig]( [id] [int] IDENTITY(1,1) NOT NULL, [name] [varchar](150) NOT NULL, [value] [nvarchar](max) NOT NULL ) 表中的两个值存储应启用或禁用节能的时间: EnablePowerSave 10:00PM DisablePowerSa

我正在尝试查询具有以下架构的表:

  CREATE TABLE [dbo].[FIN_MeetingDisplay-DefaultConfig](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [name] [varchar](150) NOT NULL,
    [value] [nvarchar](max) NOT NULL
  )
表中的两个值存储应启用或禁用节能的时间:

EnablePowerSave 10:00PM
DisablePowerSave上午8:00

我想做的是查询表,看看当前时间是否在EnablePowerSave和DisablePowerSave窗口之间

我现在用下面的语句查询它,它总是返回false,因为它使用的是今天的日期。如果在上午8点之后使用明天的日期,而在上午8点之前使用今天的日期,那么更改查询的最佳方式是什么

SELECT  CONVERT(DATETIME, CAST(GETDATE() AS VARCHAR(11)) + ' ' + VALUE, 103)
FROM    dbo.[FIN_MeetingDisplay-DefaultConfig]
WHERE   name = 'EnablePowerSave'
谢谢


Matt

这意味着一些假设知识-启用时间在第一天,禁用时间总是在第二天,并且您总是在第二天运行查询

DECLARE @t SMALLDATETIME;
SET @t = CURRENT_TIMESTAMP;

;WITH x(n,t) AS
(
  SELECT name = LEFT(name, 1), 
    DATEADD(DAY, CASE WHEN LEFT(name, 1) = 'E' THEN -1 ELSE 0 END, 
    CONVERT(SMALLDATETIME, CONVERT(CHAR(8), CURRENT_TIMESTAMP, 112) 
    + ' ' + value))
  FROM dbo.[FIN_MeetingDisplay-DefaultConfig]
  WHERE name IN ('EnablePowerSave', 'DisablePowerSave')
)
SELECT 
  [start]   = x.t,
  [end]     = y.t,
  [current] = @t,
  [status]  = CASE 
    WHEN @t BETWEEN x.t AND y.t 
        THEN 'between' 
        ELSE 'not between' 
    END
FROM x 
CROSS JOIN x AS y
WHERE x.n = 'E'
AND y.n = 'D';