閱讀482 返回首頁    go 阿裏雲


時間日期類型__數據類型_SQL語法參考_雲數據庫 OceanBase-阿裏雲

日期和時間類型格式範圍大小(字節)
DATEYYYY-MM-DD‘1000-01-01’到‘9999-12-31’3
DATETIMEYYYY-MM-DD HH:MM:SS‘1000-01-01 00:00:00’到 ‘9999-12-31 23:59:59’5+秒精度存儲
(實際存儲:8字節)
TIMESTAMPYYYY-MM-DD HH:MM:SS‘1970-01-01 00:00:00’到 ‘2037-12-31 23:59:59’4+秒精度存儲
(實際存儲:8字節
TIMEHH:MM:SS‘-838:59:59’到‘838:59:59’3+秒精度存儲
(實際存儲:6字節)
YEARYYYY(默認格式)‘1901到2155’和‘0000’1
YY‘70到69’,表示從1970年到2069年。

在日期和時間函數中,DATETIME、TIMESTAMP、TIME類型,默認是精確到秒,還支持指定秒精度參數,秒精度存儲根據存儲需求最大支持微妙(3字節),秒精度存儲根據精度不同,占用空間取0-3字節。

形如:type_name(fsp)。

type_name 表示DATETIME、TIMESTAMP、TIME等類型。

fsp參數是表示秒精度,取值範圍為:0-6。默認值取0;最大值為6,表示精確到微妙。

  • DATE

    日期。支持的範圍為‘1000-01-01’到‘9999-12-31’。以‘YYYY-MM-DD’格式顯示DATE值,但允許使用字符串或數字為DATE列分配值。

  • DATETIME

    DATETIME[(fsp)]

    日期和時間的組合。支持的範圍是‘1000-01-01 00:00:00.000000’到‘9999-12-31 23:59:59.000000’。以‘YYYY-MM-DD HH:MM:SS[.fraction] ’格式顯示DATETIME值,但允許使用字符串或數字為DATETIME列分配值。fsp參數是表示秒精度,取值範圍為:0-6。默認值取0;最大值為6,表示精確到微妙。

    DATETIME 數據類型和 TIMESTAMP 數據類型都支持 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP 子句。

  • TIMESTAMP

    TIMESTAMP[(fsp)]

    這個數據類型與MySQL不完全一致,主要是在OceanBase 1.0裏TIMESTAMP類型的格式是按嚴格模式來判斷,不允許“0000-00-00 00:00:00”等非法值。

    下列字符串類型是不合法的:

      ‘2012^12^32’
      ‘20070523’
      ‘070523’
      ‘071332’
    

    下列整數類型同樣是不合法的:

      19830905
      830905
    

    DEFAULT CURRENT_TIMESTAMP,ON UPDATE CURRENT_TIMESTAMP 子句

    用DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP子句,列默認使用當前的時間戳,並且自動更新;如果默認值設定為其他值(如0或NULL),則不會自動更新時間戳。

  • TIME

    TIME[(fsp)]

    時間。範圍是 ‘-838:59:59.000000’到‘838:59:59.000000’。以‘HH:MM:SS[.fraction]’格式顯示TIME值,但允許使用字符串或數字為TIME列分配值。fsp參數是表示秒精度,取值範圍為:0-6。默認值取0;最大值為6,表示精確到微妙。

    ‘D HH:MM:SS[.fraction]’格式的字符串。還可以使用下麵任何一種“非嚴格”語法:‘H:MM:SS[.fraction]’、‘HH:MM:SS’、‘HH:MM’、‘D HH:MM:SS’、‘D HH:MM’、‘D HH’或‘SS’。這裏D表示日,可以取0到34之間的值。

    ‘HHMMSS’格式的沒有間割符的字符串,假定是有意義的時間。例如,‘101112’被理解為‘10:11:12’,但‘109712’是不合法的(它有一個沒有意義的分鍾部分),將變為‘00:00:00’。

    HHMMSS格式的數值,假定是有意義的時間。例如,101112被理解為‘10:11:12’。下麵格式也可以理解:SS、MMSS、HHMMSS、HHMMSS.fraction。

    函數返回的結果,其值適合TIME上下文,例如CURRENT_TIME。

    對於指定為包括時間部分間割符的字符串的TIME值,如果時、分或者秒值小於10,則不需要指定兩位數。‘8:3:2’與‘08:03:02’相同。

    為TIME列分配簡寫值時應注意。沒有冒號,解釋值時假定最右邊的兩位表示秒。(解釋TIME值為過去的時間而不是當天的時間)。例如,你可能認為‘1112’和1112表示‘11:12:00’(11點過12分),係統中將它們解釋為‘00:11:12’(11分,12 秒)。同樣,‘12’和12 被解釋為 ‘00:00:12’。相反,TIME值中使用冒號則肯定被看作當天的時間。也就是說,‘11:12’表示‘11:12:00’,而不是‘00:11:12’。

    超出TIME範圍但合法的值被裁為範圍最接近的端點。例如,‘-850:00:00’和‘850:00:00’被轉換為‘-838:59:59’和‘838:59:59’。

    無效TIME值被轉換為‘00:00:00’。請注意由於‘00:00:00’本身是一個合法TIME值,隻從表內保存的一個‘00:00:00’值還不能說出原來的值是 ‘00:00:00’還是不合法的值。

  • YEAR

    兩位或四位格式的年。默認是四位格式。在四位格式中,允許的值是1901到2155和0000。在兩位格式中,允許的值是70到69,表示從1970年到2069年。以YYYY 格式顯示YEAR值,但允許使用字符串或數字為YEAR列分配值。

    可以指定各種格式的YEAR值:

    • 四位字符串,範圍為‘1901’到‘2155’。

    • 四位數字,範圍為1901到2155。

    • 兩位字符串,範圍為‘00’到‘99’。‘00’到‘69’和‘70’到‘99’範圍的值被轉換為2000到2069和1970到1999範圍的YEAR值。

    • 兩位整數,範圍為1到99。1到69和70到99範圍的值被轉換為2001到2069和1970到1999範圍的YEAR值。請注意兩位整數範圍與兩位字符串範圍稍有不同,因為你不能直接將零指定為數字並將它解釋為2000。你必須將它指定為一個字符串‘0’或‘00’或它被解釋為0000。

    • 函數返回的結果,其值適合YEAR上下文,例如NOW()。

      非法YEAR值被轉換為0000。

對於DATETIME、DATE、TIMESTAMP和YEAR類型,OceanBase使用以下規則解釋含模煳年值的日期:

  • 00-69範圍的年值轉換為2000-2069。

  • 70-99範圍的年值轉換為1970-1999。

ORDER BY可以正確排序有兩位年的TIMESTAMP或YEAR值。

部分函數如MIN()和MAX()將TIMESTAMP或YEAR轉換為一個數字。這說明使用有兩位年值的值,這些函數不能工作正確。在這種情況下的修複方法是將TIMESTAMP或YEAR轉換為四位年格式或使用MIN(DATE_ADD(TIMESTAMP,INTERVAL 0 DAYS))。

最後更新:2016-11-24 11:23:47

  上一篇:go 字符串類型__數據類型_SQL語法參考_雲數據庫 OceanBase-阿裏雲
  下一篇:go 邏輯運算符__運算符_SQL語法參考_雲數據庫 OceanBase-阿裏雲