Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datetime 在Oracle查询中的函数调用中进行日期时间计算_Datetime_Reporting Services_Plsql_Oracle10g_Oracle Sqldeveloper - Fatal编程技术网

Datetime 在Oracle查询中的函数调用中进行日期时间计算

Datetime 在Oracle查询中的函数调用中进行日期时间计算,datetime,reporting-services,plsql,oracle10g,oracle-sqldeveloper,Datetime,Reporting Services,Plsql,Oracle10g,Oracle Sqldeveloper,好的,我回答了问题的第一部分,这是第二部分。:-)在PLSQL查询中,我有如下条件: where Doc3.clinicalDate >= ml.convert_date_to_id(:DateBegin) and Doc3.clinicalDate < ml.convert_date_to_id(:DateEnd) 其中Doc3.clinicalDate>=ml.convert\u date\u to\u id(:DateBegin) 和Doc3.clinicalDate

好的,我回答了问题的第一部分,这是第二部分。:-)在PLSQL查询中,我有如下条件:

where Doc3.clinicalDate >= ml.convert_date_to_id(:DateBegin)
    and Doc3.clinicalDate < ml.convert_date_to_id(:DateEnd)
其中Doc3.clinicalDate>=ml.convert\u date\u to\u id(:DateBegin)
和Doc3.clinicalDate
现在,我不想使用:DateEnd本身——我想加上1天,这样当它将datetime与午夜进行比较时,我就得到了第二天的午夜。不幸的是,当我

where Doc3.clinicalDate >= ml.convert_date_to_id(:DateBegin)
    and Doc3.clinicalDate < ml.convert_date_to_id(:DateEnd + 1)
其中Doc3.clinicalDate>=ml.convert\u date\u to\u id(:DateBegin)
和Doc3.clinicalDate
我得到“ORA-06553:PLS-306:调用'CONVERT_DATE_to_ID'时参数的数量或类型错误”。“:DateEnd+interval'1'day”给出了“ORA-30081:datetime/interval算术的数据类型无效”(其中:DateEnd绑定到2012年5月31日)。如果我执行“将_date _转换为_id(添加_months(:DateEnd,1))”,它可以正常工作。有什么想法吗?谢谢


ETA:我应该澄清这是一个SSRS 2008 R2项目,
DateBegin
DateEnd
在报告参数中定义为日期时间参数。我目前的解决方法是将
:DateEnd
查询参数设置为
@DateEnd
报告参数+1,但我担心有一天我会忘记正确记录此参数,并将试图维护报告的人(可能是我)弄糊涂。我不想像前面建议的那样传递字符串参数。

使用
to_date
转换值。例如:

select &date + 1 from dual
通知日期('29052012','ddmmyyyy')
工作正常


通知
'2012年5月29日'
给出了
ORA-01722:无效数字
使用
到日期
转换数值。例如:

select &date + 1 from dual
通知日期('29052012','ddmmyyyy')
工作正常


通知
'29-may-2012'
给出了
ORA-01722:无效数字

假设
ml.convert\u date\u to\u id
日期
作为输入参数,而不是表示日期的
VARCHAR2
,并假设
:DateEnd
绑定变量是
VARCHAR2
,你需要像这样的东西

ml.convert_date_to_id( to_date( :DateEnd, 'DD-MON-YYYY' ) + 1 )


假设
ml.convert\u date\u to\u id
date
作为输入参数,而不是表示日期的
VARCHAR2
,并且假设
:DateEnd
绑定变量是
VARCHAR2
,则需要如下内容

ml.convert_date_to_id( to_date( :DateEnd, 'DD-MON-YYYY' ) + 1 )


我认为参数DateTime是问题的根源。Microsoft DateTime数据类型比Oracle的粒度大得多,因为它支持分数秒,而Oracle日期格式不支持分数秒(但Oracle时间戳支持)

因为ADD_MONTHS只会吐回在日期数据类型中传递的任何内容(即传递的时间戳变为日期)。因此,也许您可以转换参数并以这种方式添加日期:

where Doc3.clinicalDate >= ml.convert_date_to_id(:DateBegin) 
    and Doc3.clinicalDate < ml.convert_date_to_id(CAST(:DateEnd as DATE)+1) 
其中Doc3.clinicalDate>=ml.convert\u date\u to\u id(:DateBegin)
和Doc3.clinicalDate
或者,忘记参数的转换和日期算法,从第二个临床医生日期中减去一天:

where Doc3.clinicalDate >= ml.convert_date_to_id(:DateBegin) 
    and Doc3.clinicalDate - 1 < ml.convert_date_to_id(:DateEnd) 
其中Doc3.clinicalDate>=ml.convert\u date\u to\u id(:DateBegin)
和Doc3.clinicalDate-1
我认为DateTime参数是问题的根源。Microsoft DateTime数据类型比Oracle的粒度大得多,因为它支持分数秒,而Oracle日期格式不支持分数秒(但Oracle时间戳支持)

因为ADD_MONTHS只会吐回在日期数据类型中传递的任何内容(即传递的时间戳变为日期)。因此,也许您可以转换参数并以这种方式添加日期:

where Doc3.clinicalDate >= ml.convert_date_to_id(:DateBegin) 
    and Doc3.clinicalDate < ml.convert_date_to_id(CAST(:DateEnd as DATE)+1) 
其中Doc3.clinicalDate>=ml.convert\u date\u to\u id(:DateBegin)
和Doc3.clinicalDate
或者,忘记参数的转换和日期算法,从第二个临床医生日期中减去一天:

where Doc3.clinicalDate >= ml.convert_date_to_id(:DateBegin) 
    and Doc3.clinicalDate - 1 < ml.convert_date_to_id(:DateEnd) 
其中Doc3.clinicalDate>=ml.convert\u date\u to\u id(:DateBegin)
和Doc3.clinicalDate-1
我不认为它是varchar,尽管我不确定绑定在这里是如何工作的——当我在SSRS中使用该查询时,dataset参数绑定到定义为日期的报表参数。我不认为它是varchar,尽管我不确定绑定在这里是如何工作的——当我在SSRS中使用该查询时,dataset参数绑定到定义为日期的报表参数。什么数据类型是
clinicalDate
,以及
convert_date_to_id
的参数和返回类型是什么?函数convert_date_to_id(日期)返回数字作为开始返回(日期到日期('01/01/1960','mm/dd/yyyyy'))*1000000*86400;终止什么数据类型是
clinicalDate
,以及
convert_date_to_id
的参数和返回类型是什么?函数convert_date_to_id(日期中的日期)返回数字作为开始返回(日期中的日期('01/01/1960','mm/dd/yyyyy')*1000000*86400;终止第二个不起作用——clinicalDate是一个奇怪的东西,包括与进行编辑的工作站相关的id。不过,我会看看你的第一个建议。谢谢是的,这很管用,它把转换放在了我想要的地方——检查的地方越多,我错过的机会就越多。:-)第二个不起作用——clinicalDate是一个奇怪的东西,包括与进行编辑的工作站相关的id。不过,我会看看你的第一个建议。谢谢是的,这很管用,它把转换放在了我想要的地方——检查的地方越多,我错过的机会就越多。:-)