2016-12-01 61 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; 

注:沒有測試。