MS SQL Server中的Oracle RR日期格式

时间:2014-12-23 16:59:14

标签: sql sql-server oracle sql-server-2008 oracle11g

我有一个Oracle SQL脚本,我正在转换为在MS SQL Server中运行。该脚本中包含to_date函数,并使用RR日期格式。这是功能:

to_date('07-AUG-14','DD-MON-RR')

我打算像这样使用MS SQL Server函数CONVERT

CONVERT(DATETIME, '07-AUG-14', num)

其中num是我需要的格式代码。

我应该在MS SQL Server中使用哪些代码来获得与Oracle RR格式相同类型的功能?

1 个答案:

答案 0 :(得分:0)

对于美国日期时间转换,您可以使用:

CONVERT(DATETIME, '07-AUG-14', 10)
--                             ^^

对于其他文化, style (第三个参数)会有所不同;但是 style 需要是没有世纪(yy)值才能达到您的目的。

Oracle RR日期格式的语义也适用于SQL Server的yy日期样式。 MSDN上的CAST and CONVERT (Transact-SQL) (for SQL Server 2008)解释了......

  

默认情况下,SQL Server根据2049年的截止年份解释两位数的年份。也就是说,两位数的年份49被解释为2049年,而两位数的年份50被解释为1950年。

...并列出没有世纪(yy)日期样式的数值。

(作为参考,另一个SO答案解释了等效的semantics of Oracle's RR date format。)

您可以使用以下查询更广泛地确认SQL Server(美国)yy日期样式的默认语义...

SELECT CONVERT(DATETIME, '07-AUG-14', 10)
SELECT CONVERT(DATETIME, '07-AUG-49', 10)
SELECT CONVERT(DATETIME, '07-AUG-50', 10)
SELECT CONVERT(DATETIME, '07-AUG-51', 10)

...,产量......

2014-08-07 00:00:00.000 -- This century assumed.
2049-08-07 00:00:00.000 -- This century assumed.
1950-08-07 00:00:00.000 -- Last century assumed.
1951-08-07 00:00:00.000 -- Last century assumed.

...默认两位数年份截止配置。 (yy其他文化的日期样式应该表现相似。)