-1

私のテーブル名は products で、products_price を更新しようとしているので、すべての価格が99p最後にあります。手伝ってくれますか?

また、このリクエストは少し単純です (私は初めてSQLです!) 次のようにすべてのレコードを更新したいです

すべて のレコードをゼロに更新するスクリプトが必要categoriesです。parent_id

4

2 に答える 2

2

Q1

したがって、すべての価格を切り捨ててから、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 の (負でない) 整数値に対して £ x .99 の形式であることを意味ます

Q2

あなたが何を意味したかについていくつかの仮定をします:

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

何らかの方法で製品テーブルを更新することを意味している場合は、質問をより正確にする必要があります.


第2四半期の再検討

コメントから:

テーブルparent_id内のすべての値をゼロに更新したいのですが、 .categoriesparent_id > 0

おそらく、parent_idnull または負の値がいくつかあるはずなので、次のものが必要です。

UPDATE Categories
   SET Parent_ID = 0
 WHERE Parent_ID > 0

null もネガもない場合は、さらに簡単な更新を実行できます。

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 に答える