在 sql 中操作员无法正常工作

Between operator not working properly in sql

错误:ORA-01861:文字与格式字符串不匹配 01861. 00000 - “文字与格式字符串不匹配” *原因:输入中的文字必须与中的文字长度相同 格式字符串(前导空格除外)。如果 “FX”修饰符已打开,文字必须完全匹配, 没有额外的空格。 *操作:更正格式字符串以匹配文字。

 SELECT
    
        SUM("ASSET")
    
    FROM  component WHERE "Extraction Date" = '20201231' AND  "Account Start Date"
    
         BETWEEN '20151221' AND ADD_MONTHS(to_date('20151221', 'YYYYMMDD'),3) ;

试试

SELECT
    
        SUM("ASSET")
    
    FROM  component WHERE "Extraction Date" = to_date('20201231', 'YYYYMMDD') AND  "Account Start Date"
    
         BETWEEN to_date('20151221', 'YYYYMMDD') AND ADD_MONTHS(to_date('20151221', 'YYYYMMDD'),3) ;

如果此解决方案不起作用,请添加 table 的描述。

混合 字符串和日期;那是行不通的。我认为那些“日期”列实际上是字符串 - 至少,您是这样对待它们的。

This: ADD_MONTHS(to_date('20151221', 'YYYYMMDD'),3) returns a date 值,因此您必须将其转换为具有适当格式掩码的字符串。因此:

select sum ("ASSET")
  from component
 where     "Extraction Date" = '20201231'
       and "Account Start Date" 
           between '20151221'
               and to_char (add_months (to_date ('20151221', 'YYYYMMDD'), 3), 'yyyymmdd');

如果这些列是日期,那么所有内容 都应该是日期:

select sum ("ASSET")
  from component
 where     "Extraction Date" =  date '2020-12-31'
       and "Account Start Date" 
           between date '2015-12-12' and add_months(date '2015-12-21', 3);  

另外请注意,我们在使用 Oracle 时,并不特别喜欢用双引号括起来的列名称,其中有空格。显然,您可以拥有这样的列名,但这太痛苦了(从我的角度来看)。每次与他们合作时,您都必须匹配字母大小写。所以,我建议(为了将来)

select sum (asset)
  from component
 where     extraction_date =  date '2020-12-31'
       and account_start_date
           between date '2015-12-12' and add_months(date '2015-12-21', 3);