有这样的一个需求:      select 'insert into xh_data values('''+cast(pk_data as varchar)+''','''+pk_psndoc+''','''+year+''','''+period+''','''+isnull(data_01, 'null')+''','''+isnull(data_02, 'null')+''','''+isnull(data_03, 'null')+''','''+isnull(data_04, 'null')+''','''+isnull(data_05, 'null')+''','''+isnull(data_06, 'null')+''','''+isnull(data_07,'null')+''','''+isnull(data_08,'null')+''','''+isnull(data_09,'null')+''','''+isnull(data_10,'null')+''','''+isnull(data_11,'null')+''','''+isnull(data_12,'null')+''','''+isnull(data_13,'null')+''','''+isnull(data_14, 'null')+''','''+isnull(data_15, 'null')+''','''+isnull(data_16, 'null')+''','''+isnull(data_17, 'null')+''','''+isnull(data_18, 'null')+''','''+isnull(data_19, 'null')+''','''+isnull(data_20,'null')+''','''+isnull(data_21,'null')+''','''+isnull(data_22,'null')+''','''+isnull(data_23,'null')+''','''+isnull(data_24,'null')+''','''+isnull(data_25,'null')+''','''+isnull(data_26,'null')+''','''+isnull(data_27,'null')+''','''+isnull(data_28,'null')+''','''+isnull(data_29, 'null')+''','''+isnull(data_30, 'null')+''','''+isnull(data_31, 'null')+''','''+isnull(cast(piece_1 as varchar), 'null')+''','''+isnull(cast(piece_2 as varchar), 'null')+''','''+isnull(cast(piece_3 as varchar), 'null')+''','''+isnull(cast(piece_4 as varchar),'null')+''','''+isnull(cast(piece_total as varchar),'null')+''','''+ts+''','''+cast(dr as varchar)+''')' from xh_data where year = '2004' and period = '11'
     
       这样的实现的sql语句已写好,但是有点细节问题,达不到需要的结果。请各位请看 isnull(data_**,'null')  这个拼合语句,我数据库中有的data_01 --到data_31还有几个别的字段,这些个字段下有的是有数据的有的是没有数据为null的,我想把有数据的调出唻,结果显示为比如:'DW13' 把没有数据的结果显示为:null 不加单引号,数据之间是,好隔开。
        我的这个语句是把所有的字段都加了''单引号,所以我在把历史数据还原到oracle数据库中时,null 字段的单引号就会报错,把null的单引号去掉没没事了。请求各位的帮忙,该怎样改!急需,谢谢!

解决方案 »

  1.   

    在null前后用两个单引, isnull(data_01',''null'')
      

  2.   


      你好,不行,报null附近语法错误!
      

  3.   

    NVL(data_01,'null') 
    ORACLE 里貌似没有ISNULL这样的写法吧?
    实例:select nvl(null,'null') from dual
      

  4.   


     不好意思兄弟,忘说了,先是从SQL 2000的数据库中提取脚本。所以NVL函数,SQL 2000无法识别
      

  5.   

    是我写错了,应该这样 NVL(data_01,''null''),后面的都这样写,
    select 'NVL(data_01,''null''), NVL(data_02,''null'')' from dual;查询结果为:'NVL(DATA_01,''NULL''),NVL(DATA_02,''NUL
    ----------------------------------------
    NVL(data_01,'null'), NVL(data_02,'null')
      

  6.   

    如果是Oracle10g的话,建议用q'[]',这样里面只要没有方括号,就可以依照要输入的内容随意写,单引号就用一个“'”,而不用写成“''”了,如SELECT q'[NVL(data_01,'null'),NVL(data_02,'null')]' FROM dual;