2011-12-05 97 views
1

我將C#代碼中的日期(DateTime.Now)傳遞給Oracle過程。我想C#將日期傳遞給Oracle過程

DateTime.Now之間檢索表中的所有值 - 1上午11點10分○○秒到DateTime.Now上午11時09分59秒

我怎樣寫一個oracle的條件本?

注:列「CREATEDATE」是一個日期

我現在有這個權利..

CreateDate >= TO_DATE(to_char(in_CreateDate), 'DD-MON-YY') - 1 
and CreateDate < TO_DATE(to_char(in_CreateDate), 'DD-MON-YY') + 1 

回答

1

你可以按照你的建議在日期進行數學運算。這裏有一個簡單的例子(可以替代你的DateTime.Now和適當的格式字符串,而不是我的硬編碼爲例):

SELECT TRUNC(TO_DATE('05-DEC-2011 05:31:32 PM', 'DD-MON-YYYY HH12:MI:SS PM')) 
    + 11/24 + 10/(24*60) AS MyDate FROM dual; 

MYDATE      
------------------------- 
05-DEC-11 11:10:00 AM  

注意我是如何走的輸入日期,截斷它(得到的日期沒有時間),然後將小時和分鐘添加到該基準日期。

您可以在此擴大使用BETWEEN關鍵字,得到這樣的:

SELECT * FROM my_table 
WHERE CreateDate BETWEEN TRUNC(TO_DATE('05-DEC-2011 05:31:32 PM', 
    'DD-MON-YYYY HH12:MI:SS PM')) + 11/24 + 10/(24*60) - 1 
AND TRUNC(TO_DATE('05-DEC-2011 05:31:32 PM', 
    'DD-MON-YYYY HH12:MI:SS PM')) + 11/24 + 10/(24*60); 

或者,如果你總是傳遞DateTime.Now你可以只使用日期從數據庫中:

SELECT * FROM my_table    
WHERE CreateDate BETWEEN TRUNC(sysdate) + 11/24 + 10/(24*60) - 1 
AND TRUNC(sysdate) + 11/24 + 10/(24*60); 
+0

有沒有辦法避免'TRUNC'? – CoolArchTek

+0

@CoolArchTek當然。只需省略日期的時間部分即可。或者甚至可以使用具有特定時間的DateTime對象(上午11:10)作爲它的一部分。但是,如果你打算使用'DateTime.Now',你需要用你想要使用的特定時間替換(在調用時)捕獲的時間。這可以通過'TRUNC()'或一個不捕獲時間的格式字符串。 –

1

在甲骨文的默認 - 和+運營商的日期是用天。

(in_CreateDate-1)和(in_CreateDate + 1)之間的CreateDate應該有效。

如果問題是,你真的要在這一天創造的東西,但時間戳搞亂你,甲骨文 - 運營商默認情況下只着眼於天數,所以你可以使用

其中in_CreateDate-CREATEDATE = 0

(請注意,我通常使用SQL Server,所以我不能對此進行測試,這是基於閱讀Oracle文檔)

1

要管理Oracle日期時間我用的OracleCommand和參數。 例如:

SELECT * FROM Table WHERE Date >= :date 

使用的OracleCommand你可以這樣做:

OracleCommand myOracleCommand = new OracleCommand("SELECT * FROM Table WHERE Date >= :date", myOracleConnection); 
myOracleCommand.Parameters.Add(":date", OracleDbType.DateTime).Value = myDate; 
... 

我覺得這是傳遞參數,因爲Oracle提供了一組指令的轉換查詢和執行它在服務器上的最佳方式。

相關問題