【问题标题】:SQL oracle beginner questionsSQL oracle初学者问题
【发布时间】:2014-05-10 20:14:03
【问题描述】:

问题1: 插入日期时我必须使用 to_date 吗?

INSERT INTO some_table (date1, date2) 
    VALUES (to_date('2012-10-24','YYYY-MM-DD'), to_date('2012-10-24','YYYY-MM-DD'));

或者可以作为字符串插入?一切都会这样吗?我试过了,效果很好。

INSERT INTO some_table (date1, date2) 
        VALUES ('2012-10-24',2012-10-24');

问题2: 如果我不命名要插入的列会怎样?它有效,但我的问题是它现在是随机插入还是在创建表期间需要列的顺序?

INSERT INTO some_table 
        VALUES ('2012-10-24',2012-10-24');

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    1 似乎只适用于 'YYYY-MM-DD' 格式: http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements003.htm#SQLRF51049

    您可以将 DATE 值指定为字符串文字...要将 DATE 值指定为文字,您必须使用公历。您可以指定 ANSI 文字... ANSI 日期文字不包含时间部分,并且必须以“YYYY-MM-DD”格式指定。

    但是,如果您使用

    ,它可能会随着时间的推移而起作用

    您也可以指定 Oracle 日期值... Oracle DATE 值的默认日期格式由初始化参数 NLS_DATE_FORMAT 指定。

    对于问题 2,它使用表定义时的顺序。但是,在这种情况下,您必须为所有列提供值。

    【讨论】:

      【解决方案2】:

      Oracle 支持标准 SQL 日期文字(从 9i 开始)。

      它是DATE,后跟一个'yyyy-mm-dd'格式的字符串

      DATE '2014-05-10'
      

      它比 TO_DATE 短得多,并且独立于任何 NLS 设置。

      时间戳类似:

      TIMESTAMP '2014-05-10 09:52:35'
      

      关于您的第二个问题:这是 CREATE TABLE 中定义的列顺序。

      【讨论】:

      • 但他们在我们学校学到了很多旧东西......所以他们强迫我们使用 to_date 和 oracle:10g 但感谢一些新信息:) 但你仍然没有回答问题,可以你先请? :D 我可以像 varchar 一样插入它,甚至认为它的类型是 DATE 吗?然后我可以在上面使用所有日期函数吗?
      • 嗯,Oracle 9i 是在 2000 年发布的 :-) 他们是否也教 DECODE 而不是 CASE 和旧的连接语法而不是 JOIN?甚至 Oracle 在旧的专有语法上也推广了更新的标准 SQL 语法。
      • 是的,他们教 DECODE,但也教 CASE,DECODE 有那么老/坏吗?
        什么是旧的连接语法?他们教我们“加入”和“加入使用”,但也加入了“where a.id=b.id”以便更好地理解我猜
      • DECODE 只是旧的专有语法,类似于简单的“valued CASE”。希望他们不要使用 (+) 而不是 LEFT/RIGHT JOIN 来教授旧的外连接语法,您只需要在阅读几年前编写的一些查询时知道它,但对于初学者来说,这只是让我感到困惑。
      【解决方案3】:

      你甚至可以这样做:

      ALTER SESSION SET NLS_DATE_FORMAT = 'MM:YYYY:DD';
      INSERT INTO some_table (date1) VALUES ('05:2014:10');
      

      ...但不建议这样做。使用 TO_DATE 或 DATE Literal,例如DATE '2014-05-10' 代替。它让您的生活更轻松。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-04
        • 2020-11-23
        • 2015-03-16
        • 2012-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多