[.NET] oracle 日期區間問題(解決)

作者: ian90911 (xopowo)   2014-03-22 01:21:23
請輸入專案類型(網站專案或者應用程式專案):
網站專案
我用grid view撈oracle資料庫,
有兩個欄位:開始日期與結束日期
設定條件是如果這兩個日期都有指定,
就撈出開始日期大於等於指定日期1,
結束日期小於等於指定日期2的資料
為了好讀與安全我使用string builder與parameters去分析變數
但是試了很多種寫法只有單純用字串湊出SQL的方式能撈出資料
可是同樣的sql在sql developer裡面都能夠撈出資料
邏輯上應該是對的
首先:
StringBuilder sbStringSql = new StringBuilder();
sbStringSql.Append("select A.ID,B.NAME,A.STARTDATE,A.ENDDATE FROM A,B");
sbStringSql.Append("WHERE 1=1 AND A.ID=B.ID");
然後以下是可以撈回來的的寫法,單純用字串組,用大於跟小於寫區間
sbStringSql.Append(
" and ((to_char(A.STARTDATE,'yyyy-mm-dd')) >='" + strSTARTDATE + "'");
sbStringSql.Append(" and (to_char(A.ENDDATE,'yyyy-mm-dd')) <='"
+ strENDDATE + "')");
不行的寫法,大於跟小於的寫法用變數不行
sbStringSql.Append(" and ((to_char(A.STARTDATE,'yyyy-mm-dd')) >=:STARTDATE");
sbStringSql.Append(" and (to_char(A.ENDDATE,'yyyy-mm-dd')) <=:ENDDATE)");
if (strSTARTDATE != string.Empty)
{
da.SelectCommand.Parameters.Add(
new OracleParameter("STARTDATE",strSTARTDATE));
}
if (strENDDATE != string.Empty)
{
da.SelectCommand.Parameters.Add(
new OracleParameter("ENDDATE", strENDDATE));
}
另外BETWEEN的寫法用變數跟字串組都不行
變數就是跟上面一樣用PARAMETER去解
字串就是把日期那邊直接帶入text box的text
不知道是SQL寫法問題還是程式問題,想來求救一下
作者: mraaa (重新出發....)   2014-03-23 00:55:00
你的變數沒有設type所以預設字串!那你str的格式有照yyyy-mm-dd嗎?

Links booklink

Contact Us: admin [ a t ] ucptt.com