-1

我的表名是产品,我正在尝试更新 products_price,以便所有价格都99p在最后。你能帮我吗?

这个请求也有点简单(我是新手SQL!)我想更新所有记录如下

categories> 0中的任何内容 parent_id我需要脚本将所有记录更新为零

4

2 回答 2

2

第一季度

因此,您希望截断所有价格,然后添加0.99货币单位。将值截断到小数点后 0 位的功能因 DBMS 而异;我假设它被称为 TRUNC,但它可能在您的 DBMS 中被称为 FLOOR 或其他名称:

UPDATE Products
   SET Products_Price = TRUNC(Products_Price) + 0.99;

这里不需要 WHERE 子句。我假设没有负价格;如果这是可能的,那么你需要在你的分配上更聪明一点(也许是一个 CASE 表达式;也许你有一个可用的函数 SIGN、SIGN、SIGNUM)。

请注意,我假设p引用的是便士,如“英镑(英镑)和便士”。如果价格在 0.00 英镑到 0.99 英镑之间,则结果为 0.99 英镑;如果价格在 1.00 英镑到 1.99 英镑之间,则结果为 1.99 英镑;等等。 TRUNC 或 FLOOR 将从价格中删除任何小数部分,加上 0.99 则意味着结果的形式为 £ x .99 (非负)整数值x

第二季度

对你的意思做出一些假设:

UPDATE Categories
   SET Anything = 0
 WHERE Anything > 0
   AND Parent_ID > 0;

如果您的意思是要以某种方式更新产品表,那么您的问题需要更加精确。


重访第二季度

来自评论:

我想将表中的所有parent_id值更新categories为零,其中parent_id > 0.

据推测,必须有一些parent_id值为空或负的值,所以你需要:

UPDATE Categories
   SET Parent_ID = 0
 WHERE Parent_ID > 0

如果没有空值和负数,那么您可以运行更简单的更新:

UPDATE Categories
   SET Parent_ID = 0

它将那些父 ID 已经为零的行以及那些没有的行设置为零。这可能会比更具选择性的更新更严重地影响日志(例如,将有更多更改记录在逻辑日志中或 DBMS 的等效项中),但除非有大量记录并且其中大多数已经有零父 ID 并且 DBMS 无法识别记录何时未更改并为未更改的行写入日志记录,那么您不太可能注意到差异

于 2012-08-09T22:55:02.590 回答
1

将价格设置为最后 99 便士:

update products_price set price = floor(price)+0.99;

将 parent_id 设置为 0:

update categories set parent_id = 0 where parent_id > 0;
于 2012-08-09T22:55:28.693 回答