2016-10-15 27 views
0

在SQLSERVER我有,無論出於何種原因,儲存的日期和時間在該表的單獨行舊的數據庫,使我有從表中進行選擇時的日期和時間是在單獨的列

ID | ACTDate     | ACTTime | NOTE 
1 | 2016-02-17 00:00:00.000 | 1432 | Sold 4 boxes. 

ACTDateDateTime,而ACTTimechar(4)

我希望能夠從我的winForm應用程序(在C#中)查詢最近X小時內的報告數量。所以我的查詢是這樣的:

DateTime startDate = DateTime.Now.AddHours(-numHoursToLookBack); 
SELECT NOTE FROM myTable WHERE ACTDATE >= '" + startDate.ToString("yyyy-MM-dd HH:mm:ss.fff") + "' " 

顯然不行,因爲ACTDATE總是午夜當天被查詢。

所以,我需要一種方法來在查詢期間合併列。我研究了很多方法來在查詢過程中將列轉換爲類型,但這裏就像我需要將它們合併,然後轉換它們,然後根據結果選擇它們。我很抱歉,但我真的不知道從哪開始。

任何幫助表示讚賞!

+0

小於1000的時間精確值是多少? (我的意思是那裏的前導零爲0959?) – Steve

+0

很難在沒有TimeStamp值的日期選擇聽起來像存儲日期的問題,您只需要獲取日期值 – MethodMan

回答

1

當然,正確的操作應該是統一日期和時間的一次性腳本,但如果這是不可能的,那麼你應該在兩個條件的地方使用兩個條件(並且這隻有在你的時間與前導零小時小於10)

DateTime startDate = DateTime.Now.AddHours(-numHoursToLookBack); 
string initTime = startDate.ToString("hhmm"); 

// This is just as an example because you haven't provided more context 
// but remember to never build query in this way. Use always parameters  
SELECT NOTE FROM myTable WHERE ACTDATE >= '" + 
    startDate.ToString("yyyy-MM-dd") + "' AND ACTIME >= '" + 
    initTime + "'" 

使用參數

string query = @"SELECT NOTE FROM myTable 
       WHERE ACTDATE >= @date 
       AND ACTIME >= @time"; 
SqlCommand cmd = new SqlCommand(query, connection); 
cmd.Parameters.Add("@date", SqlDbType.Date).Value = startDate; 
cmd.Parameters.Add("@time", SqlDbType.Char, 4).Value = initTime; 
// Execute the command 
0

你可以這樣做:

where actdate + cast(stuff(acttime, 3, 0, ':') as time) >= dateadd(hour, - $HOURS, getdate()) 
相關問題