2016-12-01 63 views
1

我有一种情况,我有一个包含两个日期lke startdate和enddate 的表以及一个存在变量@offset的过程。TSQL CODE为变量设置值

我需要编写一个tsql代码,用于在当前日期落入表中的开始日期和结束日期之间时将偏移值设置为x。所以我必须检查当前日期是否在表中的startdate和enddate之间,然后设置该值。如果没有,我必须将偏移值设置为y。我不得不在自己的程序中这样做。

感谢您的帮助。

+0

我试图写一个case语句,但我无法从整个表中检查当前日期。 – kris

+0

'Set @offset = Value' – Sami

+0

这听起来像你还在想像一个非sql程序员。什么是你必须做的 - 它可以在不使用IF语句的情况下在sql中完成。记住在SQL中你想使用set而不是单个值。 – Hogan

回答

0
SET @offset = CASE WHEN GETDATE() BETWEEN @StartDate AND @EndDate THEN x ELSE y END 

也许试试这个。

DECLARE @OffsetTable (placeholder INT) 
INSERT INTO @OffsetTable 
SELECT 1 
FROM Table 
WHERE GETDATE() BETWEEN StartDate AND EndDate 

if (@@rowcount > 0) 
SET @offset = x 
ELSE SET @offset = y 
+0

我应该声明一个varibale @startdate,我怎样才能将表中的值设置为..那不是一个值..有多个开始日期我需要检查 – kris

+0

@kris如果有多个日期那么返回的结果将超过一条记录。如果是这种情况,您需要一个表来保存这些值。 – Snowlockk

+0

@@ Snowlockk我可以使用上面的case语句,当我只有一个startdate或只有一个结束日期,但我有lke 200开始和结束日期?所以我如何声明一个变量并将这些日期分配给@startdate。 – kris

0

试试这个:

DECLARE @I Int; 
DECLARE @Start Int =0; 
DECLARE @End Int=0; 
Set @I = Select Count(*) From YourTable; 
While @I > 0 
Begin 
IF (GetDate() > select StartDate from yourTable where [email protected]) 
Set @Start = @Start + 1; 
IF (GetDate() < select EndDate from yourTable where [email protected]) 
Set @End = @End + 1; 
Set @I = @I -1; 
End; 
Set @I = Select Count(*) From YourTable; 
If (@Satr = I) And (@End = I) 
Set @Offset = X 
Else Set @Offset = Y; 

注:没有测试。