2010-07-14 81 views
0
ResultSet rs=st.executeQuery(
    "select j.vc_jo_no, 
      j.dt_jo_date, 
      p.vc_product_name 
    from mst_jobcard j, 
      mst_prod p 
    where j.vc_product_code=p.vc_product_code 
    and j.dt_jo_date=to_char("+tdate+","+"'"+dd-mm-yy+"'"+") 
    "); 

在我指定的查询中,它应该基于上述查询中传递的日期参数显示记录。 vc_jo_no,dt_jo_date取自mst_jobcard表,vc_product_name取自mst_prod表。 我已加入表格。 请帮助我如何使用日期的to_char函数。 当我在to_char函数中指定格式即dd-mm-yy时,它会给出错误。 请帮助..应如何参数化Oracle中基于日期的查询

+3

请格式化您的代码,适当使用标点符号和大写字母,并告诉我们**错误说的是什么**! – Quentin 2010-07-14 10:20:56

+0

这也可能有助于了解“st”是什么。 – 2010-07-14 12:22:05

回答

1

所以你正在运行:

executeQuery("select … where … j.dt_jo_date=to_char("+tdate+","+"'"+dd-mm-yy+"'"+")"); 

的第一件事情,尽量把那个字符串变量,输出它,看看它是否在正确的格式。

你试过:

"… to_char("+tdate+",'dd-mm-yy'") 

好像你正在做不必要的杂技与字符串。

最后,请看Burleson Consulting的“Oracle to_char usage”。这是第一个链接关闭Google。有人说谷歌是一个首先寻找的好地方。

+3

+ 1“有人说谷歌是首先看的好地方。” - 是的,只是可惜其总是b **** Y Burleson谁出来顶! – 2010-07-14 13:15:52

4

如果您要将日期作为字符串传递,Oracle需要用单引号将它包围。此外,“dd-mm-yy”对我来说看起来并不合适。试试这个:

ResultSet rs=st.executeQuery(
"select j.vc_jo_no, 
     j.dt_jo_date, 
     p.vc_product_name 
from mst_jobcard j, 
     mst_prod p 
where j.vc_product_code=p.vc_product_code 
and j.dt_jo_date=to_char('"+tdate+"','dd-mm-yy') 
"); 

也就是说,传递参数的这种方法不能有效传递参数 - 这将导致数据库来分析不同的查询请求的每个不同的日期,这很可能导致可伸缩性问题。

更好的方法是绑定参数,使用ResultSet提供的任何方法来绑定变量。你可能会发现你甚至可以原生地绑定一个日期变量而不必将其转换为字符串。

+0

+1尤其适用于绑定变量。如果这是.Net,那么我认为语法是:to_char(?,'dd-mm-yy') – 2010-07-14 13:17:05