以99p结束价格结束

时间:2012-08-09 22:47:56

标签: sql rounding

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

此请求也有点简单(我是SQL的新手!)我想更新所有记录,如下所示

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

2 个答案:

答案 0 :(得分:2)

Q1

因此,您希望截断所有价格,然后添加0.99货币单位。将值截断为0位小数的函数在DBMS之间有所不同;我假设它被称为TRUNC,但它可能被称为FLOOR或DBMS中的其他东西:

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(<非负)整数值< EM> X

Q2

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

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

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


重访Q2;

来自评论:

  

我想将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的行以及不具有父ID的行设置为零。这可能会比更有选择性的更新更难记录日志(例如,在逻辑日志中记录的更改或DBMS的等效更多),但除非有大量记录,并且大多数记录已经有零父ID和DBMS无法识别记录何时未更改并写入未更改行的日志记录,那么您不太可能注意到差异

答案 1 :(得分:1)

将价格设定为最终为99p:

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

将parent_id设为0:

update categories set parent_id = 0 where parent_id > 0;