查询以获取数据库

时间:2016-10-10 10:20:18

标签: c# sql datetime

我想从数据库中检索符合以下规范的数据。

当前变量为:日期和班次

我想检索等于今天日期的数据,并且班次等于“C”

我确实得到了结果,但接下来就出现了问题:

我也从前一天的“C”班次获得结果

原因是因为这些变化如下......

Shift A = 05:45 - 13:45

Shift B = 13:45 - 21:45

Shift C = 21:45 - 05:45

这意味着我得到前一天的数据,因为前一班次C的日期相同,因为它重叠了2天

如何编写查询以仅检索特定C班次的数据?

我目前的查询是:

SELECT * FROM Data WHERE Shift = currentshift AND Date = todayDate

2 个答案:

答案 0 :(得分:2)

我相信你想要的是:

SELECT d.*
FROM Data d
WHERE CAST(@DATE as TIME) >= '21:45:00') OR
      CAST(@DATE as TIME) <= '05:45:00') 

您还需要一个日期条件。我不确定您的数据是什么样的。

答案 1 :(得分:0)

试试这个, 我假设您想要按时间过滤,而不是按日期过滤,因此您的SQL查询将是这样的

IsNull(LEFT(CONVERT(TIME(0),Shift ),5),'00:00') > @startTime and 
IsNull(LEFT(CONVERT(TIME(0),Shift ),5),'00:00') < @endTime

已更新:

另一种方法是创建动态查询,并根据条件追加where子句

DECLARE @currentshift nvarchar(150);
DECLARE @SQL nvarchar(max);
DECLARE @todayDate datetime;
--set @todayDate=getdate();
--set @Date=GETDATE();
--set @currentshift='shift c'

Set @SQL=N'SELECT * FROM Data WHERE Shift='''+@currentshift+'''';
IF  (@currentshift ='21:45 - 05:45')
    begin
        set @SQL =@SQL+ ' and [Date] >='''+ CONVERT(VARCHAR(10),@todayDate, 101)+''' and [Date] <='''+ CONVERT(VARCHAR(10),DATEADD(DAY,1,''+@todayDate+''), 101)+'''';
    end
ELSE 
    begin
        set @SQL =@SQL+ ' and [Date] ='''+ CONVERT(VARCHAR(10),@todayDate, 101)+'''';
    end
-- print @SQL
exec sp_executesql @SQL