各位好!
    现在有这么个问题,数据库表A里一个字段longitude是字符型,里面有些数据是数字,另一个表B里也有个longitude字段,为number型,现在想把A表的longitude查询出来放到B表的longitude里,这就有一个问题了,如何只取出A表longitude只为数字的数据?

解决方案 »

  1.   

    不好意思,忘说了,数据库是oracle 10g
      

  2.   


    insert into b(longitude)
    select a.longitude from  a where regexp_like(a.longitude,'[[:digit:]]');
      

  3.   

    好像没对,应该这样:where not regexp_like(longitude,'[^[:digit:]]');
      

  4.   


    兄弟,我试了试,不大对啊。这个字段是经度,A表里存有类似“东经120度23分,49.46秒”,“37°11'88N ”的值,而B表标准的类型应该是121.38489 这样只有数字的形式。你上面那个sql只是吧空值的情况排除了,并没只取到数字。
      

  5.   

    会有小数不?如果没有这样应该也可以
    where trim(translate(longitude,'0123456789',' ')) is null
      

  6.   

    B表longitude字段入库的标准形式是121.38489,带小数点的数字,来源是A表的longitude字段,而A表这个字段是字符型,里面什么样的数据都有,我想只要符合B表标准形式的数据入库,这样表达清楚么?
      

  7.   

    做个函数,对A表这个字段进行TU_NUMBER,成功返回1,如果出现异常返回0。在检索时将函数作为检索条件使用。
      

  8.   

    想直接通过SQL实现,不利用函数。
      

  9.   

    问题已经解决了,where条件里增加了这样的语句:
    TRIM(B.LONGITUDE) IS NOT NULL AND
    NOT REGEXP_LIKE(B.LONGITUDE,'[[:alpha:]]') AND
    NOT REGEXP_LIKE(B.LONGITUDE,'["]')  AND
    NOT REGEXP_LIKE(B.LONGITUDE,'[°]') AND
    NOT REGEXP_LIKE(B.LONGITUDE,'[。]') AND
    NOT REGEXP_LIKE(B.LONGITUDE,'[[:space:]]') AND
    B.LONGITUDE NOT LIKE '%.%.%'