首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在获取日期和字符串参数时出现问题的查询

在获取日期和字符串参数时出现问题的查询
EN

Stack Overflow用户
提问于 2016-10-07 09:24:15
回答 2查看 95关注 0票数 0

我已经创建了一个sql查询,在该查询中,我将一个参数传递给下面共享的部分

代码语言:javascript
运行
AI代码解释
复制
BETWEEN 
           NVL(TO_CHAR(:DATE1, 'DD-MON-YYYY'), DATETIME) 
           AND 
           NVL(TO_CHAR(:DATE2, 'DD-MON-YYYY'), DATETIME)

当我使用数据类型运行这个查询时,它工作得很好,但是当我使用VARCHAR2参数运行这个查询时,它会出现以下错误:

错误执行(9: 25):ORA-01722:无效编号

当我以null运行此查询时,该查询将显示所有记录。实际上,我需要使用一个STRING参数来运行这个查询,而不是使用DATE数据,所以当我在toad中将该参数传递给相同的查询时,即使在null值中,它也能很好地工作。

以下是我的完整查询:

代码语言:javascript
运行
AI代码解释
复制
SELECT rownum,ACCOUNT_NO,CUSTOMER_NAME,CARD_NO, SOURCE, ATM_ID, ISSUER_BANK_NAME,ASE.STATUS_DESC, CARD_TYPE, CARD_RESP,
DATETIME,BR_INPUT_DATE BR_ACTIVITY
FROM ATM_RCCM, ATM_STATUS_ERRORS ASE
    where ASE.STATUS_DESC = NVL(:PT,  ASE.STATUS_DESC) 
        AND BR_TRACKING_STATUS = ASE.STATUS_CODE
            AND CARD_TYPE = NVL(:CT, CARD_TYPE)
            AND DATETIME
    BETWEEN 
           NVL(TO_CHAR(:DATE1, 'DD-MON-YYYY'), DATETIME) 
           AND 
           NVL(TO_CHAR(:DATE2, 'DD-MON-YYYY'), DATETIME)

还请注意,DATETIME列具有默认的VARCHAR2数据类型。

EN

回答 2

Stack Overflow用户

发布于 2016-10-07 12:05:39

初等亲爱的华生: TO_CHAR将日期转换为varchar2。如果你给它错误的数据类型,你为什么希望它能工作呢?当您给它一个varchar2输入时,它将尝试首先将它转换为日期,而不是抛出编译错误。不过,它将使用会话的NLS_DATE_FORMAT,而不是TO_CHAR中的格式模型。因此,在您的情况下,它不能,它抛出一个运行时错误。

无论如何,比较是错误的;很明显,您想要比较日期,而不是字符串。那么,为什么要先将日期转换为字符串,然后进行比较呢?在字符串比较中,2012年1月12日是在1993年3月9日之前.

你是想用TO_DATE而不是TO_CHAR吗?试试看会发生什么!只需确保您也使用适当的格式模型将日期时间包装在TO_DATE中。

票数 1
EN

Stack Overflow用户

发布于 2016-10-07 12:05:15

它必须是一个问题,你要输入的参数。可能您的:DATE1 1或:DATE1 2格式不正确,或者您可能在CT或PT中具有alpha字符。

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

https://stackoverflow.com/questions/39922823

复制
相关文章

相似问题

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