如何在oracle数据库的create query中创建DATE数据类型?

时间:2014-09-07 09:22:04

标签: oracle date-format

请解释如何编写创建查询,我可以在oracle中以特定格式(假设为dd / MM / yy)编写特定日期。假设我需要在我的表ORDERS中使用我的列 - order_id,order_date,数量

1 个答案:

答案 0 :(得分:2)

来自the documentation

  

"数据库在内部将日期存储为数字。日期存储在   每个7字节的固定长度字段,对应于世纪,年,   月,日,小时,分钟和秒。"

看起来像这样:

SQL> select dump(sysdate) from dual
  2  /

DUMP(SYSDATE)
--------------------------------------------------------------------------------
Typ=13 Len=8: 222,7,9,7,2,48,32,0

SQL> 

实际上看起来像八个字节但有趣的是日期长度为九个字节:

SQL> select lengthb(sysdate) from dual
  2  /

LENGTHB(SYSDATE)
----------------
               9

SQL> 

无论如何,存储是固定的,完全独立于日期的显示。

默认日期格式由NLS_DATETIME_FORMAT管理,默认为NLS_TERRITORY设置。这就是Oracle确定货币,数字,格式,星期几等的方式。阅读Globalization Support guide了解更多信息。

如果要为日期设置不同的默认格式掩码,可以在数据库级别设置。这是一个重大决定。幸运的是,它也可以设置在更精细的级别:

SQL> select sysdate from dual
  2  /

SYSDATE
---------
07-SEP-14

SQL> alter session set nls_date_format='Month DD YYYY HH12:MI AM'
  2  /

Session altered.

SQL> select sysdate from dual
  2  /

SYSDATE
--------------------------
September 07 2014 03:05 AM

SQL> 

就日期输入而言,Oracle期望包含日期的字符串具有与NLS_DATE_FORMAT指定的格式相同的格式。如果不是这种情况,那么我们必须使用TO_DATE()函数应用转换并提供字符串的掩码:

SQL> select to_date('31/05/14','DD/MM/YY') from dual
  2  /

TO_DATE('31/05/14','DD/MM/
--------------------------
May       31 2014 12:00 AM

SQL>