作者ian90911 (ianchu)
看板Visual_Basic
標題[.NET] oracle 日期區間問題
時間Sat Mar 22 01:21:23 2014
請輸入專案類型(網站專案或者應用程式專案):
網站專案
我用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寫法問題還是程式問題,想來求救一下
--
1F:推 mraaa:你的變數沒有設type所以預設字串!那你str的格式有照yyyy-mm 03/23 00:55
2F:→ mraaa:-dd嗎? 03/23 00:55
問題解決了
為什麼邏輯對了、sql丟到developer也能過,程式還是撈不回來資料呢
原來是parameter去append來替換變數
必須要按照順序去append才可以...
※ 編輯: ian90911 來自: 182.235.186.208 (03/26 21:10)