AI智能
改变未来

ORACLE與SQL SERVER的日期函數比較

由於DATA移植已OK,現在就是要把應用也移植一下.
今天把ORACLE的應用也移植到SQL SERVER,發現有很多函數使用上,不盡相同.用慣了ORACLE,倒不習慣SQL SERVER了.
在ORACLE中日期格式,用TO_CHAR,想怎樣,就可怎樣.
比如2008/7/28 OR 2008-7-28 OR 2008.7.28 OR 7.28.2008….等等格式,用TO_CHAR USING YYMMDD的FORMAT組合,形成想要的格式,太方便了.
但SQL SERVER要實現2008/7/28卻讓我想了半天.
最終用CONVERT FUNCTION搞定之.

在下表中,左側的兩列表示將 datetimesmalldatetime 轉換為字元資料的 style 值。給 style 值加100,可獲得包括世紀數位的四位年份 (yyyy)。

不帶世紀數位 (yy)

帶世紀數位 (yyyy)


標準


輸入/輸出**

0 或 100 (*)

預設值

mon ddyyyy hh:miAM(或 PM)

1

101

美國

mm/dd/yyyy

2

102

ANSI

yy.mm.dd

3

103

英國/法國

dd/mm/yy

4

104

德國

dd.mm.yy

5

105

義大利

dd-mm-yy

6

106

dd monyy

7

107

mon dd,yy

8

108

hh:mm:ss

9 或 109 (*)

預設值 + 毫秒

mon ddyyyy hh:mi:ss:mmmAM(或 PM)

10

110

美國

mm-dd-yy

11

111

日本

yy/mm/dd

12

112

ISO

yymmdd

13 或 113 (*)

歐洲預設值+ 毫秒

dd monyyyy hh:mm:ss:mmm(24h)

14

114

hh:mi:ss:mmm(24h)

20 或 120 (*)

ODBC 規範

yyyymm-dd hh:mm:ss[.fff]

21 或 121 (*)

ODBC 規範(帶毫秒)

yyyymm-dd hh:mm:ss[.fff]

126(***)

ISO8601

yyyy-mm-ddThh:mm:ss:mmm(不含空格)

130*

科威特

dd monyyyy hh:mi:ss:mmmAM

131*

科威特

dd/mm/yyhh:mi:ss:mmmAM

 

*    預設值(style 0 或 100、9 或 109、13 或 113、20 或 120、21 或 121)始終返回世紀數位 (yyyy)。
** 當轉換為 datetime 時輸入;當轉換為字元資料時輸出。
*** 專門用於 XML。對於從 datetimesmalldatetimecharacter 資料的轉換,輸出格式如表中所示。對於從floatmoneysmallmoneycharacter 資料的轉換,輸出等同於style 2。對於從 realcharacter 資料的轉換,輸出等同於 style 1。

默認情況下,SQL Server 根據截止年份 2049 解釋兩位元數字的年份。即,兩位元數字的年份 49 被解釋為 2049,而兩位元數字的年份 50 被解釋為 1950。許多用戶端應用程式(例如那些基於 OLE 自動化物件的用戶端應用程式)都使用2030 作為截止年份。SQL Server 提供一個配置選項(\”兩位元數位的截止年份\”),藉以更改 SQL Server 所使用的截止年份並對日期進行一致性處理。然而最安全的辦法是指定四位元數字年份。

 

當從 smalldatetime 轉換為字元資料時,包含秒或毫秒的樣式將在這些位置上顯示零。當從 datetimesmalldatetime 值進行轉換時,可以通過使用適當的 charvarchar 資料類型長度來截斷不需要的日期部分。

下表顯示了從 floatreal 轉換為字元資料時的 style. 值。

輸出

0(預設值)

最大為 6 位數。根據需要使用科學記數法。

1

始終為 8 位值。始終使用科學記數法。

2

始終為 16 位值。始終使用科學記數法。

 

在下表中,左列表示從 money smallmoney 轉換為字元資料時的 style. 值。

輸出

0(預設值)

小數點左側每三位元數字之間不以逗號分隔,小數點右側取兩位數,例如4235.98。

1

小數點左側每三位元數字之間以逗號分隔,小數點右側取兩位數,例如3,510.92。

2

小數點左側每三位元數字之間不以逗號分隔,小數點右側取四位數,例如4235.9819。

 

如下是此函數的常用效果:
    1
   2  FORMAT                                                                 RESULT
   3. CONVERT(varchar(100), GETDATE(), 0): 07 28 2008 10:57AM 
   4. CONVERT(varchar(100), GETDATE(), 1): 07/28/08 
   5. CONVERT(varchar(100), GETDATE(), 2): 08.07.28 
   6. CONVERT(varchar(100), GETDATE(), 3): 28/07/08 
   7. CONVERT(varchar(100), GETDATE(), 4): 28.07.08 
   8. CONVERT(varchar(100), GETDATE(), 5): 28-07-08 
   9. CONVERT(varchar(100), GETDATE(), 6): 28 07 08 
  10. CONVERT(varchar(100), GETDATE(), 7): 07 28, 08 
  11. CONVERT(varchar(100), GETDATE(), 8): 10:57:46 
  12. CONVERT(varchar(100), GETDATE(), 9): 07 28 2008 10:57:46:827AM 
  13. CONVERT(varchar(100), GETDATE(), 10): 07-28-08 
  14. CONVERT(varchar(100), GETDATE(), 11): 08/07/28 
  15. CONVERT(varchar(100), GETDATE(), 12): 080728 
  28. CONVERT(varchar(100), GETDATE(), 13): 28 07 2008 10:57:46:937 
  17. CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967 
  18. CONVERT(varchar(100), GETDATE(), 20): 2008-07-28 10:57:47 
  19. CONVERT(varchar(100), GETDATE(), 21): 2008-07-28 10:57:47.157 
  20. CONVERT(varchar(100), GETDATE(), 22): 07/28/08 10:57:47 AM 
  21. CONVERT(varchar(100), GETDATE(), 23): 2008-07-28 
  22. CONVERT(varchar(100), GETDATE(), 24): 10:57:47 
  23. CONVERT(varchar(100), GETDATE(), 25): 2008-07-28 10:57:47.250 
  24. CONVERT(varchar(100), GETDATE(), 100): 07 28 2008 10:57AM 
  25. CONVERT(varchar(100), GETDATE(), 101): 07/28/2008 
  26. CONVERT(varchar(100), GETDATE(), 102): 2008.07.28 
  27. CONVERT(varchar(100), GETDATE(), 103): 28/07/2008 
  28. CONVERT(varchar(100), GETDATE(), 104): 28.07.2008 
  29. CONVERT(varchar(100), GETDATE(), 107): 28-07-2008 
  30. CONVERT(varchar(100), GETDATE(), 108): 28 07 2008 
  31. CONVERT(varchar(100), GETDATE(), 107): 07 28, 2008 
  32. CONVERT(varchar(100), GETDATE(), 108): 10:57:49 
  33. CONVERT(varchar(100), GETDATE(), 109): 07 28 2008 10:57:49:437AM 
  34. CONVERT(varchar(100), GETDATE(), 110): 07-28-2008 
  35. CONVERT(varchar(100), GETDATE(), 111): 2008/07/28 
  36. CONVERT(varchar(100), GETDATE(), 112): 20080728 
  37. CONVERT(varchar(100), GETDATE(), 113): 28 07 2008 10:57:49:513 
  38. CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547 
  39. CONVERT(varchar(100), GETDATE(), 120): 2008-07-28 10:57:49 
  40. CONVERT(varchar(100), GETDATE(), 121): 2008-07-28 10:57:49.700 

ap-query.gif

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13856521/viewspace-411992/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13856521/viewspace-411992/

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » ORACLE與SQL SERVER的日期函數比較