簡體   English   中英

將SQL Server日期轉換為Oracle

[英]Converting SQL Server date to Oracle

從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函數將接受的格式,以及如何使該函數正確顯示日期和時間?

SET @FOO =(選擇* ...

我對此不滿意,因為您是將查詢結果以及* (所有列)都分配給變量?

無論如何,a_horse_with_no_name可以為您提供需要提供給Oracle的日期時間文字的格式,即timestamp

SET @query = 'SELECT * FROM Table1
              WHERE date_revised > timestamp ''2010-11-15 12:21:00''';

(我留給您生成YYYY-MM-DD HH:MM:SS文本的練習)

假設@mydate是DATETIME,訣竅是將日期時間更改為SQL Server上具有已知格式的字符串,並使用該格式將日期時間更改回Oracle上的DATE。

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如何將字符串轉換回日期。

因為Oracle與我不合作,所以我想出了自己的解決方案。 我基本上將所有東西都放在DATEPARTS ,並在oracle中以相同的格式構造自己的日期字符串。 感謝您的輸入。 當我有更多時間時,我將嘗試使其正常工作。 這個創可貼現在就可以了。

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

我接受了Jeff的回答,並將其包裝在一個返回to_date字符串的函數中。

    CREATE FUNCTION [dbo].[fnOracleTo_DateStringFromMsSqlDate] 
(
    @InputDate datetime
)
RETURNS varchar(100)
AS
BEGIN

    DECLARE @year varchar(4),
        @month varchar(3),
        @day varchar(2),
        @hour varchar(2),
        @minute varchar(2),
        @second varchar(2),
        @date smalldatetime,
        @OracleTime varchar(50),
        @returnString varchar(100)

    SET @year = YEAR(@InputDate)
    SET @month = Month(@InputDate)
    SET @day = DAY(@InputDate)
    -------------------------------------------------------------------------

        SET @hour = DATEPART(HH, @InputDate)

    SET @minute = DATEPART(MINUTE, @InputDate);
    SET @second = datepart(SECOND, @InputDate);

    SET @OracleTime = @day + '-'  + @month + '-' + @year + ' ' + @hour + ':' + @minute + ':' + @second ;
    set @returnString = 'to_date(' + char(39) +  @OracleTime  + char(39) + ',' + char(39) +  'DD-MM-YYYY HH24:MI:SS' + char(39) + ')'

    return @returnString;
END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM