繁体   English   中英

在Oracle PL / SQL中将Varchar2转换为最新版本

[英]Cast Varchar2 to date in Oracle PL/SQL

我在Oracle PL / SQL中有一个查询,该查询按客户名称给出了有序列表,基于账单的百分比,他们延迟付款。 查询如下

With date_check AS
    (Select *
        From tblBills
        Where Pay_Date Between CAST('2015-09-01' AS DATE) And CAST('2015-09-30' AS DATE)
    )
    Select ddo.CODE As "Customer Name",
      100.0 * ROUND(Cast(Count(fpp.ID) AS FLOAT)  / 
      ( Select Count(fpp2.ID)
        From date_check fpp2 
        Join tblMethods dppm2
         On fpp2.PAY_METHOD = dppm2.ID
        Where dppm2.IS_DELAYED = 'Y'), 2) As "% Delay"
    From date_check fpp
      Join tblMethods dppm On fpp.PAYMENT_METHOD_ID = dppm.ID
      Join tblCustomers ddo On fpp.CUSTOMER_ID = ddo.ID
    Where dppm.IS_DELAYED = 'Y'
    Group By ddo.CODE
    Order By Count(fpp.ID) Desc

当我运行此查询时,我收到以下异常:

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

怎么了?

使用日期文字

Where Pay_Date Between date '2015-09-01' And date '2015-09-30'

或使用带有明确格式掩码的to_date函数将字符串转换为日期

Where Pay_Date Between to_date('2015-09-01', 'YYYY-MM-DD') And 
                       to_date('2015-09-30', 'YYYY-MM-DD')

cast会使用任何当前会话的nls_date_format设置为。 随着时间的推移,每个人都不可能做到这一点,因此您不需要构建依赖的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM