需要在此查询中将数字字段转换为日期

时间:2016-02-18 20:06:07

标签: sql db2

我在sql server中运行它,但是比较日期有一个错误,因为列cadodt是一个数字。有没有一种快速简便的方法将该col转换为数字?它的日期是YYYYMMDD,但我无法与当前日期之类的日期字段进行比较。

select * from openquery(IBSIBM, 'select CABANO, CABCRC, CABCTR, CABCUR, CABKCO, CACLVL, CACOTI,    
    CACRDT, CACTTP, CADODT, CADOTY, CAEXRT, CAIDNO, CAJONO, CANCRX,   

    CAPERI, CAREFX, CARSCD, CASCRC, CASCTR, CASTAT, CASTMT, CASYID,   
    CATIML, CATREF, CATTXT, CATYPC, CAUSER, CAVADT, CAVODT, CAVONO,   
    CAVOTY ,NANAME  from CA1665AFCV.SROCBA, 
                                   CA1665AFCV.srolta,
                                      CA1665AFCV.sronam                         
     WHERE  CADOTY = ''CHK''    and cajono=ctjono and cadodt = CURRENT DATE()
    and caperi=ctperi and caidno=ctidno and ctveno=nanum     
    and CASTAT = ''Y''') 

4 个答案:

答案 0 :(得分:1)

您有这些选项

  1. 将cadodt从字符串转换为日期
  2. 将cadodt从intger转换为日期
  3. 将当前日期转换为YYYYMMDD字符串
  4. 将当前日期转换为YYYYMMDD整数
  5. 1和3假设cadodt是一个字符串

    2和4假设cadodt是一个整数

    3和4是效率更高的方法,因为您只更改了一个值。

    <强> e.g。

    (3)如果cadodt是YYYMMDD格式的字符串:

    AND cadodt = VARCHAR_FORMAT(CURRENT DATE, 'YYYYMMDD')
    

    (4)如果cadodt是一个代表YYYYMMDD的整数

    AND cadodt = YEAR(CURRENT DATE) * 10000 + MONTH(CURRENT DATE) * 100 + DAY(CURRENT DATE) 
    

答案 1 :(得分:1)

假设cadodt实际上是整数或数字字段而不是字符串,请尝试以下方法:

select * from openquery(IBSIBM,
   'select CABANO, CABCRC, CABCTR, CABCUR, CABKCO, CACLVL, CACOTI,
      CACRDT, CACTTP, CADODT, CADOTY, CAEXRT, CAIDNO, CAJONO, CANCRX,
      CAPERI, CAREFX, CARSCD, CASCRC, CASCTR, CASTAT, CASTMT, CASYID,
      CATIML, CATREF, CATTXT, CATYPC, CAUSER, CAVADT, CAVODT, CAVONO,
      CAVOTY, NANAME
    from CA1665AFCV.SROCBA, CA1665AFCV.srolta, CA1665AFCV.sronam
    WHERE CADOTY = ''CHK''
      and cajono = ctjono
      and cadodt = YEAR(CURRENT DATE) * 10000 + MONTH(CURRENT DATE) * 100 + DAY(CURRENT DATE)
      and caperi = ctperi
      and caidno = ctidno
      and ctveno = nanum
      and CASTAT = ''Y''')

除此之外:我强烈建议使用逗号连接反对。 ANSI 92连接语法越长,读取和维护就越容易。我还强烈建议使用合格的列名。这种模式不是最容易遵循的模式。不需要让它变得更加神秘。

答案 2 :(得分:0)

CURRENT DATE()使用CURRENT_DATE()

可能会导致您遇到一些问题

试试这个:

select * from openquery(IBSIBM, 'select CABANO, CABCRC, CABCTR, CABCUR, CABKCO, CACLVL, CACOTI,    
    CACRDT, CACTTP, CADODT, CADOTY, CAEXRT, CAIDNO, CAJONO, CANCRX,   

    CAPERI, CAREFX, CARSCD, CASCRC, CASCTR, CASTAT, CASTMT, CASYID,   
    CATIML, CATREF, CATTXT, CATYPC, CAUSER, CAVADT, CAVODT, CAVONO,   
    CAVOTY ,NANAME  from CA1665AFCV.SROCBA, 
                                   CA1665AFCV.srolta,
                                      CA1665AFCV.sronam                         
     WHERE  CADOTY = ''CHK''    and cajono=ctjono and cadodt = CURRENT_DATE()
    and caperi=ctperi and caidno=ctidno and ctveno=nanum     
    and CASTAT = ''Y''') 

答案 3 :(得分:0)

CADODT = CURRENT DATE()替换为:

date(substr(char(CADODT), 1, 4) || '-'|| substr(char(CADODT),5, 2) || '-'|| substr(char(CADODT), 7, 2)) = CURRENT DATE

应该将它从整数转换为日期。