在SQL Server&amp ;;中格式化1800日期神谕

时间:2016-06-13 21:48:24

标签: sql oracle sql-server-2008

我在SQL Server 2008数据库中有以下日期:06-24-1881 00:00:00:000DOB,它存储为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') 

这也不起作用。我被困住了,需要帮助。

2 个答案:

答案 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' )