【发布时间】:2012-11-04 16:28:18
【问题描述】:
从 SQL Server 中,我需要能够根据日期列从 Oracle 数据库中提取一些信息。
SET @foo = 'SELECT * from OPENQUERY(' + @LinkedServer +
', ''SELECT *
FROM Table1
WHERE date_revised > '''''+@myDate+'''''')'
不要介意' 的数字是否关闭...我删减了一些内容以缩短它。我曾尝试在 SQL Server 端使用 convert(),但我似乎找不到 Oracle 接受的格式,因此它不断抛出错误。
至少,我需要日期、小时和分钟。在 SQL Developer (Oracle) 中测试值以找出可接受的格式时,我一直遇到这种行为:
select to_date('2010-11-15 12:21:00', 'yyyy/mm/dd hh:mi:ssam') from dual
15-NOV-10
很明显,我指定了我想要时间,但它就是不同意我的看法。我在这个问题上被困太久了。
简而言之,如何将 SQL Server datetime 格式化为 Oracle 的 to_date 函数将接受的格式,以及如何使该函数正确显示日期和时间?
【问题讨论】:
-
A
DATE没有格式。DATE值的格式化由客户端完成,而不是服务器(这就是您所看到的)。如果您需要特定格式的输出,则需要使用to_char()(在 Oracle 端)。见这里:sqlfiddle.com/#!4/d41d8/4378 -
@a_horse_with_no_name 为了使用上面指定的
@myDate,我需要使用varchar对吗?当我键入datetime -> varchar时,它不会以某种方式格式化吗?我尝试了使用 to_char 的建议,但出现错误:OLE DB provider "OraOLEDB.Oracle" for linked server "TED_IMCD" returned message "ORA-01841: (full) year must be between -4713 and +9999, and not be 0".The dynamic sql get evaluate toWHERE date_revised > to_char(timestamp 'Nov 15 2012 11:12AM', 'YYYY.MM.DD HH24:MI:SS') -
你需要传递: 1. 一个字符串,代表一个已知格式的日期。 2. TO_CHAR 的参数再次定义了该格式。
to_char(timestamp 'Nov 15 2012 11:12AM', 'YYYY.MM.DD HH24:MI:SS')没有实现之前的答案。 -
使用
timestamp '...'时,格式 必须 为 ISO(我在 SQLFiddle 中显示的方式)。指定日期文字是 (ANSI) SQL 标准。对于这样的 SQL 日期文字,您不能使用任意格式。
标签: sql sql-server oracle