我在SQL Server 2008数据库中有以下日期:06-24-1881 00:00:00:000
为DOB
,它存储为datetime
。
我需要将这些数据复制到我们的Oracle 11g数据库中,根据我的理解,Oracle不会在Datetime
列中接受毫秒数。对于我在1900年之后的数据,我将数据转换为smalldatetime
并且它有效,但对于这段数据,它不会转换为smalldatetime
,因为它不允许在1/1之前的日期/ 1900。
如何将多行数据存入我的Oracle数据库?
我试过了:
left(DOB, 19) as DOB
但是这使得数据为“Jun 24 1881 12:00 AM”,所以我尝试插入:
to_date('Jun 24 1881 12:00AM', 'MON-DD-YYYY HH:MI:SSAM')
这也不起作用。我被困住了,需要帮助。
答案 0 :(得分:0)
CONVERT(VARCHAR(20),@Date,101)
会给你06/24/1881我正在寻找代码。
REPLACE(CONVERT(VARCHAR(200),@Date,101),'/','-') + ' 00:00:00:000'
很奇怪我用CONVERT尝试了一堆世纪代码,它适用于101和其他一些但你想要的113失败但因为你没有分钟,小时,秒等等你可以采用101格式并将字符串操作到你想要的。
DECLARE @Date DATE = '06-24-1881 00:00:00:000'
SELECT @Date
,FORMAT(@Date, 'MM-dd-yyyy HH:mm:ss')
,REPLACE(CONVERT(VARCHAR(200),@Date,101),'/','-') + ' 00:00:00:000'
请注意FORMAT(@Date, 'MM-dd-yyyy HH:mm:ss')
是SQL 2012或更新版本并且运行良好。
答案 1 :(得分:0)
Jun 24 1881 12:00AM
匹配Oracle格式字符串MON DD YYYY HH12:MIAM
。您的格式掩码有一个额外的秒:SS
掩码,Oracle试图匹配但未在输入中找到,因此会抛出ORA-01861: literal does not match format string
异常。
因此,如果SQL Server的输出采用该格式,那么在Oracle中您应该能够:
TO_DATE( 'Jun 24 1881 12:00AM', 'MON DD YYYY HH12:MIAM' )