0

首先感谢您阅读。

价格字段有时是无效的形式。该值的默认形式应该是 $xxx.xx 但是,有时它可能会显示 $xxx.xx$xxx.xx 这是我想要完全删除的东西。如果价格字段发生错误,我基本上只想删除该行。

我能够使用 php 函数进行检查以简单地检查它,但这样做似乎需要很长时间,因为它必须遍历每条记录(大约 2000+)。有没有更好更快的方法来做到这一点?也许直接在MYSQL命令中?

目的是验证价格字段以确保它没有重复的美元符号,如果有,则在进一步处理完成之前将其删除。

        if(substr_count($deleterow['product_price'], "$") >= 2 || $deleterow['product_StoreItemNumber'] = null)
4

2 回答 2

1
UPDATE table SET produce_price=0 WHERE produce_price LIKE '%$$%'

只需让数据库完成工作。

编辑为允许定价,如前所示(顺便说一句,将价格符号存储在列中真的很糟糕,该列应该是十进制(10,2)格式并且只存储价格值,即 xxx.xx 在其中您的货币符号应该在应用程序中.

UPDATE table SET produce_price='$0.00' WHERE produce_price LIKE '%$%$%' OR produce_price LIKE '%$$%'
于 2013-06-10T15:24:46.950 回答
1

如果您要确保价格符号没有重复的美元符号,首先您必须询问为什么您的价格列允许美元符号。它应该是一个数字。

也就是说,在 MySQL 中查找字符串中字符出现次数的方法是获取字符串的长度,然后从中减去删除字符后的字符串长度。例如:

  1. price='$123.45$'`(长度=8)
  2. REPLACE(price, '$', '') =123.45`(长度=8)
  3. 8 - 6 = 2, 所以$在`price.

所以在 MySQL 中,逻辑是这样的:

WHERE LENGTH(price) - LENGTH(REPLACE(price, '$', '')) >= 2

或者,您可以price通过删除所有美元符号然后在值前面添加一个美元符号来更新所有值以仅具有一个美元符号。这将更新所有行,但它们都将具有单个美元符号:

UPDATE myTable
SET price = CONCAT('$', REPLACE(price, '$', ''))

但同样,您真的应该使用数字列并在前端代码中格式化价格。

于 2013-06-10T15:31:19.803 回答