2009-02-12 40 views
2

我有一个排,看起来像这样的表:更新多行与另一列计算出的值

( 48498429,“...‘’...”)

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

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

  1. 如何为SQL中的所有行执行此操作? (即使用某种功能更新它们)
  2. 应该为列指定什么样的默认值以确保将来的插入操作能够正确提取日期?

UPDATE - 请阅读bobince在第一个回答问题上我们是如何走到答案的评论乔纳森·桑普森。这是工作的最终查询:

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

的问题是,我用substringsubstring(str, 0, 8),而应该是substring(str, 1, 8)。我想我们都习惯了0作为开始位置!这里更多信息关于substring

相关:multiple updates in mysql

回答

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

还是我错了?

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

也可能工作。未经测试。

+0

...我也希望能够将它插回到表格中。在所有的行中。 – Swati 2009-02-12 03:54:44

+0

我添加的UPDATE选项可能对此有所帮助。 – Sampson 2009-02-12 03:55:07

1

在你的更新中使用子选择(未经测试,我一直在使用Firebird太久,所以有人在这里检查我)。至于未来插入正确提取日期,你将不得不创建一个插入触发器来提取该记录的日期。

0

需要使用子查询。

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

编辑 lc给了我几秒钟!

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