2017-08-02 28 views
0

我从前一天的表中挑选比率。我正在做的是减去1表单日期参数,但执行此查询后,我收到一个错误“ORA-00932:不一致的数据类型:预期的DATE有NUMBER”。善良指导我如何克服这个错误。提前致谢。 我的样本查询:如何从Sql中的日期参数中减去一个数字

SELECT CCY_RATE.MID_REVAL_RATE 
    FROM curr_currency_market_his CCY_RATE 
WHERE  CCY_RATE.CURR_ID = a.CCY_BOUGHT 
     AND CCY_RATE.CURRENCY_MARKET = 1 
     AND CCY_RATE.LEAD_COMPANY = 1 
     AND CCY_RATE.BANKING_DATE =:Report_date -1 

回答

0

你可以试试下面查询来获取前一天:

SELECT CCY_RATE.MID_REVAL_RATE 
    FROM curr_currency_market_his CCY_RATE 
WHERE  CCY_RATE.CURR_ID = a.CCY_BOUGHT 
     AND CCY_RATE.CURRENCY_MARKET = 1 
     AND CCY_RATE.LEAD_COMPANY = 1 
     AND CCY_RATE.BANKING_DATE =DATEADD(DD, DATEDIFF(DY, 0, :Report_date), -1); 
+0

谢谢Rajesh G,我试过这个,但不幸的是DATEADD和DATEDIFF功能不支持。我尝试了“CCY_RATE.BANKING_DATE = to_date((:Report_date) - 1),'DD/MM/YYYY')”作为解决方法,但它不起作用。 ! –

+1

你正在使用哪个sql版本? –

+0

谢谢,我使用 - > to_date((to_date(:Report_date,'DD/MM/YYYY') - 1),'DD/MM/YY')解决了这个问题。 –

0

使用DATE_SUB删除时间

SELECT CCY_RATE.MID_REVAL_RATE 
FROM curr_currency_market_his CCY_RATE 
WHERE CCY_RATE.CURR_ID = a.CCY_BOUGHT 
    AND CCY_RATE.CURRENCY_MARKET = 1 
    AND CCY_RATE.LEAD_COMPANY = 1 
    AND CCY_RATE.BANKING_DATE = DATE_SUB(:Report_date, INTERVAL 1 DAY) 

在这里,你是说,你想从您的:Report_date中删除“1天”。

希望它有帮助。

0

试试这个:

SELECT CCY_RATE.mid_reval_rate 
FROM curr_currency_market_his CCY_RATE 
WHERE CCY_RATE.curr_id = a.ccy_bought 
    AND CCY_RATE.currency_market = 1 
    AND CCY_RATE.lead_company = 1 
    AND Cast(CCY_RATE.banking_date AS DATE) >= Cast(report_date - 1 AS DATE) 
+0

使用强制转换它再次抛出相同的错误“ORA-00932:不一致的数据类型:预期的DATE有NUMBER” –

+0

嗨,M.Ali我的答案是根据Sql Server,你的错误是来自Oracle Db,请检查你的列数据类型和语法。 –

0

如果你想获得这种通过MySQL的做,试试这个,

DATEDIFF(DAY, DATEADD(day, -1, @CreatedDate), GETDATE()) 

如果不工作,那么你可以通过PHP计算日期,并通过实际日期。要计算日期通过PHP试试这个:

date('Y-m-d', strtotime('-1 day', strtotime(report_date))));