如何将oracle的date型字段默认值设置成具体的时间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将oracle的date型字段默认值设置成具体的时间相关的知识,希望对你有一定的参考价值。

我想将oracle的一个date型字段设置成具体的值,如2099-12-21 23:59:59
该如何操作啊?注意不是用sysdate获取系统时间。

如何将oracle的date型字段默认值设置成具体的时间
可以设置的,在表结构编辑时默认值那边可以编辑,可以设置成sysdate,系统当前时间
如果是用语句创建表时,则在类型后面添加:default sysdate就可以

create table usertable
(id number,
name varchar2(100),
createdate date default sysdate);
参考技术A 如果是想将表中记录的时间显示成这个格式就用 to_char()

select to_char(字段名,'yyyy-mm-dd hh24:mi:ss') from 表名;

如果是想将某个时间insert到这个字段就用 to_date()

insert into 表名 (字段) values (to_date(时间值,'yyyy-mm-dd hh24:mi:ss'));本回答被提问者采纳

MySQL:将字段默认值设置为其他列

【中文标题】MySQL:将字段默认值设置为其他列【英文标题】:MySQL: set field default value to other column 【发布时间】:2013-03-01 08:03:16 【问题描述】:

如何将字段的默认值设置为 MySQL 中的其他列?

我在Oracle中用虚拟字段做过,但我不知道如何在MySQL中做。

这是我的桌子:

CREATE TABLE TSM_TRANSACTION_TBL
(
  TRANS_ID     INT primary key auto_increment,
  LOCATION_ID  INT,
  TRANS_DATE   DATE,
  RESOURCE_ID  INT,
  TS_ID        INT,
  MAX_VALUE    INT,
  BOOKED_UNITS INT default 0,
  REMAINING    INT default MAX_VALUE - BOOKED_UNITS,
  BOOKED       INT not null,
  USER_ID      INT,
  TRANS_TIME   TIMESTAMP
);

【问题讨论】:

可能重复:***.com/questions/6377977/… 【参考方案1】:

如Data Type Default Values 中所述:

数据类型规范中的DEFAULT <strong><em>value</em></strong> 子句表示列的默认值。除了一个例外,默认值必须是一个常量;它不能是函数或表达式。这意味着,例如,您不能将日期列的默认值设置为函数的值,例如 NOW()CURRENT_DATE。例外情况是您可以将CURRENT_TIMESTAMP 指定为TIMESTAMP 列的默认值。见Section 11.3.5, “Automatic Initialization and Updating for TIMESTAMP”。

相反,您可以定义一个插入触发器:

CREATE TRIGGER foo BEFORE INSERT ON TSM_TRANSACTION_TBL FOR EACH ROW
  IF NEW.REMAINING IS NULL THEN
    SET NEW.REMAINING := NEW.MAX_VALUE - NEW.BOOKED_UNITS;
  END IF;;

【讨论】:

我使用了你的代码,但它告诉我我不能在插入后使用 new 并且我将其更改为之前并且它工作正常 对于那些最近检查过的人,MySQL 现在允许 DEFAULT 子句 dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html 的函数【参考方案2】:

“新”对于 AFTER 插入触发器是不可接受的。您应该通过 BEFORE 插入触发器执行“字段更新”。所以,

CREATE TRIGGER foo BEFORE INSERT ON TSM_TRANSACTION_TBL FOR EACH ROW
    IF NEW.REMAINING IS NULL THEN
        SET NEW.REMAINING := NEW.MAX_VALUE - NEW.BOOKED_UNITS;
    END IF;;

【讨论】:

我修复了@eggyal 的答案

以上是关于如何将oracle的date型字段默认值设置成具体的时间的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中插入默认时间

oracle的timestamp字段转换

Linq中,怎么写日期类型字段的Where条件语句

oracle中如何将varchar型转换成int型

oracle ORA-01840:输入值对于日期格式不够长,请高手帮忙。有非法数据?怎么处理?

oracle中设置1位的整型问题