从链接到Oracle的SQL Server编写SQL查询时,怎样指定日期笔墨?
我有一个链接到Oracle 12.1数据库的SQL Server 12.0数据库. 我想在SQL Server数据库中建设一个视图,该视图从按日期过滤的Oracle表中返回数据. Oracle表在日期列上有一个索引. 乐成运行的查询是: select * from ORADB..SCHEMA.MYTABLE where MYDATE >= '20140701'; 然而,这运行得很是迟钝.我假设这是由于较量产生在SQL Server中,以是每行都被返回. 假如我走: DECLARE @earliest date = '20140701'; select * from ORADB..SCHEMA.MYTABLE where MYDATE >= @earliest; 然后它运行得很快,或许是由于前提被转达给Oracle以是正在行使表上的Oracle索引. 我的题目是我想建设一个视图.我找不到行使第二版代码建设视图的要领.假如我只是这样做: create myview as select * from ORADB..SCHEMA.MYTABLE where MYDATE >= '20140701'; 然后它运行迟钝. 是否存在SQL Server将转达给Oracle的日期笔墨的另一种名目,照旧有另一种办理方案?我还想知道是否与建设Oracle链接时行使的参数有关.供参考,它们是: USE [master] GO EXEC master.dbo.sp_addlinkedserver @server = N'ORADB',@srvproduct=N'Oracle',@provider=N'OraOLEDB.Oracle',@datasrc=N'DPDB' EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'ORADB',@useself=N'False',@locallogin=NULL,@rmtuser=N'MYUSER',@rmtpassword='#######' GO EXEC master.dbo.sp_serveroption @server=N'ORADB',@optname=N'collation compatible',@optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ORADB',@optname=N'data access',@optvalue=N'true' GO EXEC master.dbo.sp_serveroption @server=N'ORADB',@optname=N'dist',@optname=N'pub',@optname=N'rpc',@optname=N'rpc out',@optname=N'sub',@optname=N'connect timeout',@optvalue=N'0' GO EXEC master.dbo.sp_serveroption @server=N'ORADB',@optname=N'collation name',@optvalue=null GO EXEC master.dbo.sp_serveroption @server=N'ORADB',@optname=N'lazy schema validation',@optname=N'query timeout',@optname=N'use remote collation',@optname=N'remote proc transaction promotion',@optvalue=N'true' GO 编辑:我方才发明白一个很是相似的题目:Forcing a SQL Remote Query to filter remotely instead of locally 我更喜好ODBC名目:--DateTime SELECT {ts'2015-09-20 12:30:00'} --Time (however this comes with "today"-time) SELECT {t'12:30:00'} --Date SELECT {d'2015-09-20'} GO 简朴的日期笔墨不是文化独立的…… SET LANGUAGE ENGLISH; SELECT CAST('2014-09-13' AS DATETIME); GO SET LANGUAGE GERMAN; SELECT CAST('2014-09-13' AS DATETIME);--ERROR: there's no month "13" GO 但它有用 – 可是 – 方针范例为DATE(这种差别相等稀疏……): SET LANGUAGE ENGLISH; SELECT CAST('2014-09-13' AS DATE); GO SET LANGUAGE GERMAN; SELECT CAST('2014-09-13' AS DATE);--ERROR: there's no month "13" GO Thx to lad2025我想为completness添加“完备”ISO 8601,它事变正常: SET LANGUAGE ENGLISH; SELECT CAST('2014-09-13T12:30:00' AS DATETIME); GO SET LANGUAGE GERMAN; SELECT CAST('2014-09-13T12:30:00' AS DATETIME); GO (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |