[英]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.