首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORA-01861:使用count(*)时文字不匹配格式字符串

ORA-01861:使用count(*)时文字不匹配格式字符串
EN

Stack Overflow用户
提问于 2014-12-05 12:53:42
回答 2查看 1K关注 0票数 1

当我执行给定的查询时,会出现以下错误。当我将count(*)替换为*时,相同的查询返回结果,但仍然在结果集中滚动使我再次出现相同的错误。请帮我解决这个问题。

代码语言:javascript
复制
SELECT count(*) 
FROM cd_table
WHERE
     SW_CODE = 'PSTN' AND
     CRP_CODE = 'WLR' AND
     ERR_CODE = nvl('',  ERR_CODE)  AND
     PRS_ID = 'E' AND
     STATUS in ('0', '1')  and
     TO_DATE(TRANS_ST_DATE,'DD/MM/YY') > sysdate-90 ;

TRANS_ST_DATE中的值是varchar,数据看起来类似于23/09/14。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-05 13:00:51

首先,承诺以后不会将数据存储为字符串。SQL有用于日期/时间的本机类型。用它们。

显然,列的格式不是您所期望的。你可以试试这个:

代码语言:javascript
复制
(CASE WHEN SUBSTR(TRANS_ST_DATE, 1, 2) BETWEEN '01' and '31' and
           SUBSTR(TRANS_ST_DATE, 4, 2) BETWEEN '01' and '12' AND
           TRANS_ST_DATE LIKE '__/__/__'
      THEN TO_DATE(TRANS_ST_DATE,'DD/MM/YY')
 END) > sysdate - 90

您可以通过这样的方法找到违规的值:

代码语言:javascript
复制
select TRANS_ST_DATE
from cd_table
where (NOT SUBSTR(TRANS_ST_DATE, 1, 2) BETWEEN '01' and '31') OR
      (NOT SUBSTR(TRANS_ST_DATE, 4, 2) BETWEEN '01' and '12') OR
      (TRANS_ST_DATE NOT LIKE '__/__/__')
票数 1
EN

Stack Overflow用户

发布于 2014-12-05 13:02:51

您可能正在使用像SQL或PL/SQL这样的前端客户端,这些客户机在执行select * from table时只返回几行,比如前50或500行。因此,您的查询在执行select * from table时返回结果。

谈到您所面临的问题,通常情况下,ate无法转换为所需的格式。因此,您需要检查TRANS_ST_DATE列中的内容。

最后,将NVL子句修改为@jim mcnamara在他的评论中建议,因为您使用它的方式在逻辑上是不正确的。

希望它能帮上忙

维沙德

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27316361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档