使用从另一列计算的值更新多个行

时间:2009-02-12 03:49:30

标签: sql mysql

我有一个表格,其行如下所示:

20091231 48498429,'...','...')

第一部分id是一个时间戳,后跟一个随机数。 (需要与系统中的其他部分一起使用)数据已存在于表中。

我想创建一个列,时间戳,并仅提取日期(20091231)并使用时间戳更新所有行。

  1. 如何使用SQL为所有行执行此操作? (即用某种功能更新它们?)
  2. 我应该为列分配什么样的默认值,以确保将来的插入正确提取日期?
  3. 更新 - 在Jonathan Sampson关于我们如何得到答案的第一个问题中,请阅读bobince的评论。这是最终的查询:

    UPDATE table SET rdate=substring(convert(rid,char(20)),1,8);
    

    问题在于我使用substring作为substring( str, 0, 8 ),而它应该是substring( str, 1, 8 )。我想我们已经习惯了0作为开始位置!有关substring

    的更多信息

    相关:multiple updates in mysql

4 个答案:

答案 0 :(得分:2)

SELECT SUBSTRING(colDate,0,8) as 'date' 
FROM someTable

或者我错了?

UPDATE someTable
SET newDateField = SUBSTRING(colDate,0,8)

也可能会奏效。未经测试。

答案 1 :(得分:1)

在您的更新中使用子选择(未经测试,我已经使用Firebird太长时间了,所以有人在这里检查我。)

UPDATE MyTable AS TUpdate
SET MyNewField = (SELECT SUBSTRING(TSub.MyDateColumn,0,8) 
                  FROM MyTable AS TSub 
                  WHERE TSub.MyID = TUpdate.MyID);

至于将来插入正确提取日期,您将不得不在insert上创建一个触发器来提取该记录的日期。

答案 2 :(得分:0)

需要使用子选择。

UPDATE someTable set timestamp =(SELECT SUBSTRING(colData,0,8)FROM someOriginalTable);

编辑 lc让我几秒钟!

答案 3 :(得分:0)

UPDATE tbl
SET
   newDateField = SUBSTRING(CAST(sourceCol AS varchar), 0, 8)