首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将SQL Server日期转换为Oracle

将SQL Server日期转换为Oracle
EN

Stack Overflow用户
提问于 2012-11-16 07:48:03
回答 4查看 7.1K关注 0票数 0

在SQL Server中,我需要能够根据日期列从Oracle数据库中提取一些信息。

代码语言:javascript
复制
SET @foo = 'SELECT * from OPENQUERY(' + @LinkedServer +
', ''SELECT *
    FROM Table1
    WHERE date_revised > '''''+@myDate+'''''')'

如果'的数字关闭了,请不要介意。我删掉了一些东西让它变得更短。我尝试过在SQL Server端使用convert(),但是我似乎找不到一种Oracle可以接受的格式,所以它总是抛出错误。

至少,我需要日期、小时和分钟。在SQL Developer (Oracle)中测试值以确定可接受的格式时,我总是遇到以下行为:

代码语言:javascript
复制
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函数可以接受的格式,以及如何使该函数正确地显示日期和时间?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-17 00:56:06

我想出了我自己的解决方案,因为甲骨文对我不合作。基本上,我获取所有内容的DATEPARTS,并在oracle中以相同的格式构造我自己的日期字符串。当我有更多的时间时,我会试着让它像它应该的那样工作。

代码语言:javascript
复制
DECLARE @year varchar(4),
    @month varchar(3),
    @day varchar(2),
    @hour varchar(2),
    @meridian varchar(2),
    @minute varchar(2),
    @second varchar(2),
    @date smalldatetime,
    @OracleTime varchar(50);

SET @date = (SELECT MAX(Processed) FROM MES_CAPP.Signoff)
SET @year = YEAR(@date)
SET @month = DATENAME(m,@date)
SET @day = DAY(@date)
-------------------------------------------------------------------------
IF (DATEPART(hh, @date) >= 12)
BEGIN
    SET @hour = DATEPART(hh, DATEADD(hh, -12, @date))
    SET @meridian = 'PM'
END
ELSE
BEGIN
    SET @hour = DATEPART(hh, @date)
    SET @meridian = 'AM'
END

SET @minute = DATEPART(MINUTE, @date)
SET @second = '00'

SET @OracleTime = @day + '-'  + @month + '-' + @year + ' ' + @hour + ':' + @minute + ':' + @second + ' ' + @meridian
票数 0
EN

Stack Overflow用户

发布于 2012-11-16 08:26:39

设置@FOO = (SELECT * ...

我对此不以为然,因为您将查询的结果和* (所有列)都赋给了一个变量?

无论如何,Oracle提供了您需要呈现给a_horse_with_no_name的datetime文本的格式,即timestamp

代码语言:javascript
复制
SET @query = 'SELECT * FROM Table1
              WHERE date_revised > timestamp ''2010-11-15 12:21:00''';

(我将生成YYYY-MM-DD HH:MM:SS文本的工作留给您)

票数 2
EN

Stack Overflow用户

发布于 2012-11-16 14:26:49

假设@mydate是DATETIME,诀窍是将datetime更改为SQL Server上具有已知格式的字符串,并使用该格式将其改回Oracle上的日期。

代码语言:javascript
复制
SET @foo = 'SELECT * from OPENQUERY(' + @LinkedServer +
', ''SELECT *
     FROM Table1
WHERE date_revised > TO_DATE('''''
                     + CONVERT( varchar( max ), @myDate, 120 )
                     + ''''', ''''yyyy-mm-dd hh24:mi:ss'''') '')'

120部分告诉SQL Server将日期格式化为格式为yyyy-mm-dd hh24:mi:ss的字符串,格式部分告诉Oracle如何将字符串转换回日期。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13408253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档