2012-02-02 85 views
6

有人可以帮助我如何创建一个包含当天日期和30天的表格。 是这样对吗?使用当前日期和当前日期之后30天创建表

创建表样品 datetoday日期时间不为空默认的current_datetime(), dateafter30days DATETIME NOT NULL默认CURRENT_DATE(+30)

的逻辑,例如有一个用户,现在注册,以便它会纪录数据库和他的注册到期30天后。

意味着注册和到期日期的日期..

非常感谢

乔伊

回答

1
create table SAMPLE 
(
    SUBSCRIBER_ID INT Primary Key, 
    REGISTER_DT  DATETIME NOT NULL, 
    EXPIRE_DT  DATETIME NOT NULL 
) 

可以更新过期日期时,注册新用户如下。

INSERT INTO SAMPLE(SUBSCRIBER_ID,REGISTER_DT,EXPIRE_DT) 
    VALUES (1,GETDATE(), DATEADD(DAY,30,GETDATE()) 
+0

嗨,我试过,已经,,但有可能把价值作为这样创建表样品 ( SUBSCRIBER_ID INT主键, REGISTER_DT DATETIME NOT NULL默认值创建脚本(1,GETDATE()), EXPIRE_DT DATETIME NOT NULL默认DATEADD(DAY,30,GETDATE())) – 2012-02-02 03:00:55

1

是的,在这里你试试。当插入新的订户数据时,注册日期是当前日期,过期日期是当前日期之后的30天。你插入的sql语句,不需要提及这两列(REGISTER_DT,EXPIRE_DT),这两个将在插入语句时自动更新。

根据下表的结构,你的插入语句应该是

INSERT INTO SAMPLE (SUBSCRIBER_NM) VALUES ('John'); 

- 表创建语句

CREATE TABLE [dbo].[SAMPLE](
     [SUBSCRIBER_ID] [int] IDENTITY(1,1) NOT NULL, 
     [SUBSCRIBER_NM] [nvarchar](50) NOT NULL, 
     [REGISTER_DT] [datetime] NOT NULL CONSTRAINT [DF_SAMPLE_REGISTER_DT] DEFAULT (getdate()), 
     [EXPIRE_DT] [datetime] NOT NULL CONSTRAINT [DF_SAMPLE_EXPIRE_DT] DEFAULT (dateadd(day,(30),getdate())), 
    CONSTRAINT [PK_SAMPLE] PRIMARY KEY CLUSTERED 
    (
     [SUBSCRIBER_ID] ASC 
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
    ) ON [PRIMARY] 
2

你可以使用计算(和可选持久)字段此:

CREATE TABLE YourTableName 
(
Subscriber INT PRIMARY KEY, 
IssueDate DATETIME, 
ExpireDate AS DATEADD(DAY, 30, IssueDate) 
) 
+0

谢谢:)你的帮助 – 2012-02-02 06:44:29

+0

@DatabaseAdmin最好的感谢总是upvote并接受答案8) – 2012-02-02 06:47:21

1

在插入时创建表格和触发器 * 表*

create table test 
(
sub_id int primary key, 
issueDate datetime, 
expDate datetime 
) 

CREATE TRIGGER test_trigger BEFORE INSERT ON `test` 
FOR EACH ROW SET NEW.issueDate = IFNULL(NEW.issueDate,NOW()), 
NEW.expDate= TIMESTAMPADD(DAY,30,NEW.issueDate)