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:00PMDisablePowerSave上午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';