try:
你组合sql语句的时候加上'号

解决方案 »

  1.   

    是在in (to_char(key_date,'yyyymm'),to_char(key_date,'yyyymm')中的key_date上面加上'号?
      

  2.   

    i have used to_date method.it can deal with thie problem.:)
      

  3.   

    你把通过变量得到的SQL语句SHOW出来看看,是不是在oracle中可以执行的.
      

  4.   

    strSQL = "...in (to_char('" & key_date & "','yyyymm'),to_char('" & key_date & "','yyyymm')"肯定没有问题,但key_date不能为空
      

  5.   

    to  dinya2003(OK) :SQL语句早就show出来了,而且在sql plus里面验证过了,呵呵。没有问题的
    to  GerryYang(轻尘) :我昨晚解决这个问题了,就是像前辈那样写的,但是用的是to_date方法,就是把他们都变成日期格式了,谢谢您。
    to 大家:我刚刚学习orcale,做asp的开发,很多东西不明白,还请各位前辈多多指教了,呵呵。
    难道这样写就可以引用一个变量" & key_date & ",这个变量从session中得到也可以,在程序中声明之后再赋值也可以?
    现在我胡乱的猜测,难道to_char(key_date,'yyyymm')这样的形式,如果key_date是数据库中字段的话,绝对没有问题,但是如果不是的话,就一定要写成to_char('" & key_date & "','yyyymm')的形式,当然key_date不能为空。
      

  6.   

    哦,对了,还有各位前辈。象我这样写,in (to_char(key_date,'yyyymm'),to_cha(key_date,'yyyymm')从SQL语句本身来说没有错误,也能查询出数据,但是查询的数据并不符合我的要求。
    用户输入http://......./actdtl/adt2000dl.asp?key_date=200403的话,我希望to_char(key_date,'yyyymm')的返回值是'200403'这种形式,带单引号'的这种形式(VARCHAR2类型),但是现在看来并不是。我只是想知道,在这种情况下它的返回值是什么呢??
      

  7.   

    select ''''||to_char(sysdate,'yyyymm')||'''' from dual 这样就可以得到你要的结果,根据你的需要自己改动一下,就能放到你的程序中去了
      

  8.   

    to_char(key_date,'yyyymm'),我一开始出问题的时候,程序就是像您说的那样写的。最后,我用to_date('" & key_date & "','yyyymm')这种写法查询出的数据才符合要求。这样看来,to_char(key_date,'yyyymm')的返回值不是'200403'或者不是这种格式。也许to_char('" & key_date & "','yyyymm')才可以。
      

  9.   

    请前辈把''号和“”号在Oracle里面的区别稍微说一下行么。我有些不明白了。
      

  10.   

    我的语句中出现过两次4个单引号,你把语句放到SQL PLUS中去运行一下
      

  11.   

    SQL> select ''''||to_char(sysdate,'yyyymm')||'''' col from dual;COL
    --------
    '200411'     注意返回的结果是有单引号的SQL> 
      

  12.   

    我的这个语句是放在where后面的
      

  13.   

    to_char(ac.key_date,'yyyymm') in (''''||to_char(key_date,'yyyymm')||'''',''''||to_char(key_date,'yyyymm')||'''')这样写没有查到数据to_char(ac.key_date,'yyyymm') in (to_char('" & key_date & "','yyyymm'),to_char('" & key_date & "','yyyymm'))这样写则干脆就不能运行,在sql plus中无法运行,SQL语句是错的。看来解决的办法,只有用to_date把他们都转换成日期型。
      

  14.   

    把to_char(ac.key_date,'yyyymm')的结果贴出来
      

  15.   

    或者说ac.key_date的值是什么,什么类型的数据
      

  16.   

    KEY_DATE
    --------
    04-03-01
    04-03-02
    04-03-03
    04-03-04
    04-03-05
    04-03-08
    04-03-09
    04-03-10
    04-03-11
    04-03-12
    04-03-15
      

  17.   

    to_char之后的值
    KEY_DA
    ------
    200403
    200403
    200403
    200403
    200403
    200403
    200403
    200403
    200403
    200403
    200403
      

  18.   

    还有一个没搞懂的问题,to_char(ac.key_date,'yyyymm') in (to_char(key_date,'yyyymm'),to_char(key_date,'yyyymm'))
    in 中的两个值为一个相同的字符串,
    为什么不用to_char(ac.key_date,'yyyymm')=to_char(key_date,'yyyymm')
      

  19.   

    SQL> select 1 from dual where to_char(sysdate,'yyyymm') in (to_char(sysdate,'yyyymm'),to_char(sysdate,'yyyymm'));        1
    ---------
            1SQL> 
    我觉得不会出现你所描述的问题啊
      

  20.   

    sysdate是系统时间,所以不会有问题。
    而我用的变量key_date = Request("key_date"),是通过get方法传过来的,就出现问题了。
    虽说我的程序已经交了,但是这点并不明白。
    如果说to_char(ac.key_date,'yyyymm')之后的值像下面这样的话
    KEY_DA
    ------
    200403
    那么是不是就可以说to_char(ac.key_date,'yyyymm')='200403'呢?
      

  21.   

    to_char是在ORACLE中使用的,而你的ac.key_date是ASP中用的。把你的程序改成如下试试:to_char('+ac.key_date+','yyyymm') in (to_char(key_date,'yyyymm'),to_char(key_date,'yyyymm'))
      

  22.   

    最后逼得我没有辙了,我就这么写,结果是对的。
    ......wherer to_date(to_char(ac.key_date,'yyyymm'),'yyyymm') in (to_date('" & key_date & "','yyyymm'),to_date('" & key_date & "','yyyymm'))......
      

  23.   

    ylben(杨威利),有QQ吗,聊聊250025207
      

  24.   

    to ORARichard(没钱的日子好难过啊) :前辈,我的QQ号是58792054。但是我现在出差,可能最早也要明年5月才能和您在QQ上聊了。。我很菜,请您多包涵。我刚才在Oracle中,又进行了实验。
    结果如下:
    第一种写法(在Oracle中可以查询出数据,而且是正确的)
      3* where  to_char(ac.key_date,'yyyymm') in ('&key_date','&key_date')
    SQL> /
    key_dateに値を入力してください: 200405
    key_dateに値を入力してください: 200405
    旧   3: where  to_char(ac.key_date,'yyyymm') in ('&key_date','&key_date')
    新   3: where  to_char(ac.key_date,'yyyymm') in ('200405','200405')  EMP_NO NAME                           NORMAL_TIME
    ------ ------------------------------ -----------
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7EMP_NO NAME                           NORMAL_TIME
    ------ ------------------------------ -----------
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 719行が選択されました。我在ASP中这样写
    to_char(ac.key_date,'yyyymm') in ('key_date','key_date')
    查询结果是什么也没有查到,但是SQL语句没有报错。第二种写法(在Oracle中可以查询出数据,而且是正确的)
      3* where  to_char(ac.key_date,'yyyymm') in (&key_date,&key_date) and ac.emp_no=per.emp_no(+) and a
    SQL> /
    key_dateに値を入力してください: 200405
    key_dateに値を入力してください: 200405
    旧   3: where  to_char(ac.key_date,'yyyymm') in (&key_date,&key_date) and ac.emp_no=per.emp_no(+) an
    新   3: where  to_char(ac.key_date,'yyyymm') in (200405,200405) and ac.emp_no=per.emp_no(+) and ac.cEMP_NO NAME                           NORMAL_TIME
    ------ ------------------------------ -----------
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7EMP_NO NAME                           NORMAL_TIME
    ------ ------------------------------ -----------
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 7
    13590  小林 豊                                 719行が選択されました。我在ASP中这样写
    where to_char(ac.key_date,'yyyymm') in (key_date,key_date)
    SQL语句报错ORA-01861第三种情况我这么写(在Oracle中就不行)
      3* where  to_char(ac.key_date,'yyyymm') in (to_char('&key_date','yyyymm'),to_char('&key_date','yyyymm'))
    SQL> /
    key_dateに値を入力してください: 200405
    key_dateに値を入力してください: 200405
    旧   3: where  to_char(ac.key_date,'yyyymm') in (to_char('&key_date','yyyymm'),to_char('&key_date','
    新   3: where  to_char(ac.key_date,'yyyymm') in (to_char('200405','yyyymm'),to_char('200405','yyyymm
    where  to_char(ac.key_date,'yyyymm') in (to_char('200405','yyyymm'),to_char('200405','yyyymm')) and 
                                                              *
    行3でエラーが発生しました。:
    ORA-01481: 数値書式モデルが無効です第四种情况我这么写(在Oracle中也不行)
      3* where  to_char(ac.key_date,'yyyymm') in (to_char(&key_date,'yyyymm'),to_char(&key_date,'yyyymm'
    SQL> /
    key_dateに値を入力してください: 200405
    key_dateに値を入力してください: 200405
    旧   3: where  to_char(ac.key_date,'yyyymm') in (to_char(&key_date,'yyyymm'),to_char(&key_date,'yyyymm'))
    新   3: where  to_char(ac.key_date,'yyyymm') in (to_char(200405,'yyyymm'),to_char(200405,'yyyymm')) 
    where  to_char(ac.key_date,'yyyymm') in (to_char(200405,'yyyymm'),to_char(200405,'yyyymm')) and ac.e
                                                            *
    行3でエラーが発生しました。:
    ORA-01481: 数値書式モデルが無効です剩下的几种情况还没有试验,有时间我马上试试
      

  25.   

    以上的1,2种情况在sql plus中可以,但是在asp中不可以。如果前辈感兴趣的话,可以看一下第一第二种情况的最后,我写出了asp中的语句
      

  26.   

    key_date应该是数据库中的字段吧, 那ac是什么?
      

  27.   

    strsql="select ... from ac where to_char(ac.key_date,'yyyymm') in ('" & key_date & "','" & key_date & "')"
      

  28.   

    呵呵,有时间我一定试验。今天下午,就把这个帖子结了。to ORARichard(没钱的日子好难过啊) :总耗着不给分不太好,等我试验完了,一定给您发消息。但是我的印象中,这种方法好像试验过了^^不过我会在试验一下,已经还请您们多多指教。