【发布时间】:2017-04-14 12:33:10
【问题描述】:
我想使用 WHERE 子句从表中选择多行,后记我想格式化日期并覆盖列。我创建了以下 SQL 语句:
UPDATE aufgabenliste.aufgabendefinition
SET tagesauswahl = (SELECT TO_CHAR(TO_DATE(CONCAT(tagesauswahl,'.2010'), 'DDD.MM.YYYY') , 'DDD.MM')
FROM aufgabenliste.aufgabendefinition
WHERE aufgabentyp = 4)
WHERE aufgabentyp = 4;
我收到一个错误,称为:
SQL Error: ORA-01427: single-row subquery returns more than one row
如何使用 oracle 对同一个表的多行进行 Select 更新?
【问题讨论】:
-
将日期存储为 varchar2 不是一个好习惯。如果可以,最好添加日期类型的新列,根据当前列填充它,然后删除旧列。
-
我同意你的观点,但它是一个现有的应用程序,其中包含一个包含大量数据的现有数据库,我只需要迁移这一行。所以没有其他方法可以使用这个 varchar2 列。
-
请在您的表格中提供更新前后的一些示例数据,以便我们尝试看看您想要做什么。从表面上看,@JaydipJ 的答案看起来就是你想要做的,除了 tagesauswahl 列中的数据似乎是 DDD.MM 格式的字符串,所以你为什么要将它更新为这已经是任何人的猜测。这让我觉得您可能正在尝试将其更新到其他日期,但是如果没有示例输入/输出数据,这很难说。
-
你说得对,但旧格式是例如 1.1,我想将其迁移到 001.01。当然 365.12 没有变化,但是对于单个字符的月份和日期,会有变化。