2015-06-04 37 views
0

所以我有一個任務,將隨機20%的前一天的結果用作控制組。將這些結果放入表格中,然後推入.CSV文件供僱主使用。如何比較兩個日期,SQL/SSIS任務

這很好。唯一的問題是,它是在一組經常被測試的任務中,這意味着當任務重複時,更多的隨機數據被轉儲到文件中 - 這意味着手動刪除行。我正在尋找修復程序。

因爲該過程每天運行一次,所以唯一密鑰是TransactionDateID,格式爲INT(20150603)。我需要檢查該專欄,以確保在同一天沒有任何活動。問題加劇,因爲它涉及昨天的記錄。

例如。爲了檢查今天的日期以確定它是否已經運行,getDate()將用於獲取今天的日期,然後轉換爲INT(20150604)。但我不能簡單地檢查一下是否有數字差異1,因爲一旦月份切換,一個簡單的+1會拋出整個事情失控:

(20150631)+ 1 =/=( 20150701)

我只是想知道這是由於變量類型的不同而來回轉換/轉換,或者如果有任何事情我可以用BIT來添加一列,如果任務已經這一天完成了一些工作。


一位同事建議使用MAX(TransactionDateID),然後檢查該列的getDate()。

不幸的是,我遇到一個問題次日:30:SS:在2015-06-04-09

初始任務運行毫米

2015-06-04-11:45: ss:mm等。> 2015-06-04-09:30:ss:mm,請勿運行

2015-06-05-09:30:ss:mm等。> 2015-06-04 -09:30:SS:MM,我希望它運行...

+0

它不清楚你想要做什麼,但昨天得到的通常方式表示爲INT是CONVERT(INT,CONVERT(VARCHAR(8),DATEADD(d,-1,GETDATE()),11​​2 ))' –

+0

使用dateadd(day,1,getdate()),然後將其轉換爲int – cha

+0

Nick,這將工作得到昨天的INT,然後我可以與TransactionDateID進行比較,這也將是昨天的INT。 謝謝你。現在我只需要弄清楚如何在等價時不「繼續」的邏輯。 –

回答

0

的一天轉換成格式化的INT,試試這個:

DECLARE @today date = getdate() 
select year(@today) * 10000 + month(@today) * 100 + day(@today) 
+0

雖然是真的,但我不明白這是如何回答這個問題的。 –