【问题标题】:How to insert data in a 'DATE' type sql [duplicate]如何在“日期”类型的 sql 中插入数据 [重复]
【发布时间】:2018-08-15 03:30:31
【问题描述】:

我已经创建了这样的表格,

create table customer
(
   customer_id number(3),
   customer_name varchar(20),
   phone varchar(15)
);

create table manager
(
   customer_id number(3),
   ordered_products number(4),
   transaction_on DATE
);

现在我将如何在manager 表中插入数据?如何插入到 DATE 类型中?

【问题讨论】:

  • INSERT INTO manager (transaction_on) VALUES ('2000-02-28');
  • 您应该告诉我们您正在使用哪个数据库(例如 MySQL、SQL Server、Oracle 等),但是上面的评论应该适合您。
  • oracle 数据库

标签: sql oracle


【解决方案1】:

这个问题的答案真的取决于你使用的 sql 类型。

一般而言,如果日期时间以 ISO 格式 (yyyymmdd) 存在,则任何 sql 引擎在解析它时都不会遇到任何问题。自定义日期格式对于个别 SQL 客户端来说会很棘手且特定,但以下是可帮助您入门的广泛类型:

Oracle/PostgreSQL

INSERT INTO manager
(
    transaction_on
)
SELECT TO_DATE('23-01-2018', 'dd-mm-yyyy')
FROM DUAL;

这将允许您解析任何日期格式,只要您可以在以下字符串中指定日期格式。我提供的值只是示例,您可以根据您的特定用例使用它们。 Oracle Reference, Postgres Reference

SQL 服务器

INSERT INTO manager
(
    transaction_on
)
SELECT CONVERT(DATE, '02-25-2018', 101);

这里的 101 是来自 pre-specified list 的样式指示器,它支持多种日期格式。您可以根据您的特定输入字符串格式选择样式指示器

MySQL

INSERT INTO manager
(
    transaction_on
)
SELECT STR_TO_DATE('May 1, 2013','%M %d,%Y');    

这与 Postgres 和 Oracle 中的用法非常相似,只是日期格式的表示略有不同。 My SQL Reference

【讨论】:

    【解决方案2】:

    可以通过 SQL 语句插入:

    INSERT INTO manager (customer_id, ordered_products, transaction_on)
    VALUES (123, 2, '2018-03-07 05:52:30');
    

    【讨论】:

    • 这是一个危险的解决方案,因为它取决于客户端的 NLS 设置。使用to_date() ANSI SQL 日期文字比邪恶的隐式类型转换更受欢迎
    【解决方案3】:

    如果我们知道数据库类型,我们可以提供更准确的答案。 (等 MySQL、MSSQL、PosgreSQL、...)

    作为一个通用答案:这可能会起作用:

     INSERT INTO manager (
        customer_id,
        ordered_products,
        transaction_on) 
     VALUES (
        001,
        5,
        '2000-02-28'
     );
    

    【讨论】:

      【解决方案4】:

      在 MySQL 中,如果要插入当前日期,可以通过两种方式进行

      INSERT INTO manager (customer_id, ordered_products, transaction_on) VALUES (NULL, '110', NOW());

      或任何您可以使用的日期

      INSERT INTO manager (customer_id, ordered_products, transaction_on) VALUES (NULL,'10', '2018-03-07');

      【讨论】:

        【解决方案5】:

        在 SQL Server 中,如果您希望在事务发生时自动插入日期。

        ALTER TABLE manager ADD CONSTRAINT DF_DefaultTranDate DEFAULT GETDATE() FOR  transaction_on
        

        只要在manager 表中插入一行,transaction_on 列就会包含服务器的日期和时间。

        【讨论】:

          猜你喜欢
          • 2018-03-10
          • 2019-02-15
          • 2021-05-26
          • 1970-01-01
          • 1970-01-01
          • 2018-10-27
          • 1970-01-01
          • 1970-01-01
          • 2018-11-13
          相关资源
          最近更新 更多