在 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);
错误: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);