如何从Sql中的日期参数中减去一个数字
我从前一天的表中挑选比率。我正在做的是减去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
你可以试试下面查询来获取前一天:
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);
使用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天”。
希望它有帮助。
试试这个:
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)
使用强制转换它再次抛出相同的错误“ORA-00932:不一致的数据类型:预期的DATE有NUMBER” –
嗨,M.Ali我的答案是根据Sql Server,你的错误是来自Oracle Db,请检查你的列数据类型和语法。 –
如果你想获得这种通过MySQL的做,试试这个,
DATEDIFF(DAY, DATEADD(day, -1, @CreatedDate), GETDATE())
如果不工作,那么你可以通过PHP计算日期,并通过实际日期。要计算日期通过PHP试试这个:
date('Y-m-d', strtotime('-1 day', strtotime(report_date))));
谢谢Rajesh G,我试过这个,但不幸的是DATEADD和DATEDIFF功能不支持。我尝试了“CCY_RATE.BANKING_DATE = to_date((:Report_date) - 1),'DD/MM/YYYY')”作为解决方法,但它不起作用。 ! –
你正在使用哪个sql版本? –
谢谢,我使用 - > to_date((to_date(:Report_date,'DD/MM/YYYY') - 1),'DD/MM/YY')解决了这个问题。 –