我的要求完全取决于QUERY
.
我在过滤我的 gridview 的基础上three parameters
。
Project_name
(始终需要)Date
(不总是)Vehicle_No
(不总是)
那么,我的要求是,
使用
project_name
任何一个都可以用于过滤我的 gridview。
目前我的调试查询对任何两个参数都工作得很好。
以下是我的调试查询:-
SELECT DISTINCT sv.mkey, vehicle_no,
TO_CHAR (date_in, 'dd-MM-yyyy')
|| ' & '
|| time_in vehicleindate_time,
TO_CHAR (date_out, 'dd-MM-yyyy')
|| ' & '
|| time_out vehicleoutdate_time,
gate_no_in || ' & ' || gate_no_out ingate_outgateno,
gd.good_type goods_type, net_weight netweight,
TO_CHAR (challan_date, 'dd-MM-yyyy')
|| ' & '
|| challan_no challandate_no,
remark_in remarkin, NULL receipt_no, date_in
FROM xxcus.xxgid_supinv sv,
xxcus.xx_supinv_goodtype gd,
xxcus.xxacl_xxgid_user_mst ms
WHERE (gd.good_type_code(+) = sv.good_type)
AND ( sv.project_id = '1368'
AND TO_CHAR (date_in, 'dd-MM-yyyy') = '26-11-2015'
OR vehicle_no = '0'
)
AND sv.delete_flag = 'N'
ORDER BY date_in DESC, vehicle_no
上面的查询显示了我输入的确切project_name
结果Date
。
但是当我添加第三个参数时说它Vehicle_no
没有显示准确的数据,vehicle_no
它仍然显示我寻找2
参数的相同数据。
我正在使用 Oracle 作为数据库。
无法使用的最新更新
我对如何处理查询感到困惑,因为 Balazs 的解决方案在我选择 , Project_name
,Date
然后vehicle_no
(不是必需的)时运行良好。Project_name
但是当我首先选择, 和时,它并没有得到正确的结果Vehicle_no
。任何猜测为什么?
问题是当我只过滤时
Project_name
date_columnVehicle_no
值出现,0
所以它没有显示任何行,这是不正确的,因为我有数据Project_name
和Vehicle_no
。
我对Balaz's
下面的解决方案使用了第二个查询
WHERE (gd.good_type_code(+) = sv.good_type)
AND ( sv.project_id = '1368'
AND TO_CHAR (date_in, 'dd-MM-yyyy') = '26-11-2015'
AND vehicle_no = decode(:vehicle_no, '0', vehicle_no, :vehicle_no)
)
问题在于以下绑定变量替换:
您的应用程序应该正确地将值传递给绑定变量。您需要使用的查询是:
上面的DECODE就像一个IF-ELSE结构。这意味着,如果传递的值为
0
,则使用表中的列值,否则,使用传递的值。您的应用程序需要为以下绑定变量赋值:
例如,在SQL*Plus中:
此外,无需为DATE使用TO_CHAR。将值作为DATE传递。否则,在右侧的文字上使用TO_DATE 。保持日期不变,因为您应该比较日期而不是字符串。TO_CHAR 将日期转换为所需格式的字符串。您只需要 TO_CHAR 来显示日期,而不是在比较或日期算术时。
更新:
您的应用程序应该正确地将值传递给绑定变量。传递值后,您的查询仍然具有绑定变量 symbol
:
。如果您捕获绑定变量值,那么它应该只是:
此外,在价值上有领先的空间。虽然,它不会抛出任何错误,但它会给你不正确的输出。
如果您想根据 限制结果集
vehicle_no
,请使用AND
而不是OR
。你可以使用这样的东西,虽然我不喜欢这样的代码:
您也可以对其他参数使用上述小技巧。
以 开头
:
的变量是绑定变量,所以这是您绑定实际值的地方。这是非常糟糕的做法:
您应该比较相同的数据类型。如果必须转换不同的数据类型,转换常量或绑定变量会更好。
date_in
由于 conversino ,以上内容阻止了在列上使用常规索引。像这样做:在对逻辑进行了如此多的思考之后,
OPERATORS
我所做的就是首先,我在我的代码中创建了一个简单
string
的代码,如下所示string date = txtdatefilter.Text;
我将在其中分配
date
文本框的值。我的主要问题是,我无法解码我的
date
价值观。所以我检查了我的C#
代码中的条件,如下所示:-查询是
我想通过创建一个函数来做到这一点,但我更喜欢我的
C#
代码。那解决了我的查询
任何比这更好的答案都将受到欢迎