project表:project_name            project_state           start_date
-------------------------------------------------
测试工序                    未开始
喷漆                          正在进行中                2013-06-26
包装                          正在进行中                2013-06-26
质量抽查                    未开始

怎么在插入数据的时候,判断插入的列project_state如果为"正在进行中",则start_date为CURRENT_DATE,如果project_state为“未开始”,则不需插入。可以实现吗?

解决方案 »

  1.   

     (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
      

  2.   

    我的意思是,本来这个是由程序判断的,但我想在SQL语句直接实现:1、如果当我下拉project_state,选择项目状态为"正在进行中",则执行
    insert into project(project_name,project_state,start_date) values('喷漆','正在进行中',CURRENT_DATE)2、如果当我下拉project_state,选择项目状态为"未开始",则执行:(无须插入start_date列)
    insert into project(project_name,project_state) values('测试工序','未开始')
      

  3.   

    表的结构很简单,就这样:CREATE TABLE `project` (
      `project_name` varchar(100) NOT NULL,
      `project_state` varchar(50) DEFAULT '未开始',
      `startdate` date DEFAULT NULL
    ) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8$$
      

  4.   

    可以在触发器中实现,检查如果 new.project_state='未开始'; set new.start_date=null;
      

  5.   

    DELIMITER $$
    CREATE TRIGGER testref BEFORE INSERT ON test1
      FOR EACH ROW BEGIN
    IF new.project_state='正在进行中' THEN
    SET new.start_date=CURRENT_DATE;
    ELSE
    SET new.start_date=NULL;
    END IF;
    END$$
    DELIMITER ;
      

  6.   

    delimiter $$
    create trigger testref before isnert on test1
    for each row 
    begin
    if new.project_state='正在进行中' then
    set new.start_date=current_date;
    else
    set new.start_date=null;
    end if;
    end$$
    delimiter;
      

  7.   

    一条sql搞不定,写一个插入的存储过程吧