批量更新/替换mysql

时间:2018-07-15 06:47:45

标签: mysql database

我真的是mysql新手,可能需要您的帮助。我有一个名为localgames的表,并且我试图替换一些值以清除该表,所以这是我所尝试的问题以及所提出的“解决方案”的疑问:

要替换一个简单的条目,我使用了:

UPDATE localgames 
   SET Stock = REPLACE(Stock, '0 in stock', 'Sold out');

因此,股票列中的所有0 in stock项都被Sold out替换。很好。

但是现在我还有另一个条目,例如1 in stock2 in stock3 in stockXX in stock中的100个以上,我想将它们全部替换为In stock

有没有办法使用类似SET Stock = REPLACE(Stock, '*.* in stock', 'In Stock');的东西?

1 个答案:

答案 0 :(得分:0)

使用全能的CASE syntax

UPDATE inventory
SET quantity = CASE WHEN quantity = '0 in stock' THEN 'Out of Stock' ELSE 'In Stock' END

在此处查看我的SQLfiddle:http://sqlfiddle.com/#!9/2494c6/1

或者,IF也可以工作:

UPDATE inventory
SET quantity = IF(quantity = '0 in stock', 'Out of stock', 'In Stock')

SQLfiddle此处:http://sqlfiddle.com/#!9/4551a8/1

更新:针对您的评论,还有另外两种方法(如果您拥有REGEXP支持)

UPDATE inventory
SET quantity = CASE WHEN quantity = '0 in stock' THEN 'Out of Stock'
  WHEN quantity REGEXP '^[0-9]+ in stock$' THEN 'In Stock'
  ELSE quantity END

或者简单地

UPDATE inventory
SET quantity = IF(quantity REGEXP '^[0-9]+ in stock$', 'In Stock', quantity)

更新2:如果您没有正则表达式支持,则仍然可以这样做(尽管采用了骇人听闻的方式):

假设您已经将0库存转换为无库存,则可以使用以下方法:

UPDATE inventory
SET quantity = IF(
    CONCAT('', SUBSTR(quantity, 1, 1) * 1) = SUBSTR(quantity, 1, 1),
    'In Stock',
    quantity
)

我使用this post来确定某物是否为数字,而我使用SUBSTR(quantity, 1, 1)来确定该字符串中的第一个字母是否为数字,如果是,则对其进行设置。请注意,如果您的待补商品中有1件东西,这将不起作用

在此处查看SQLfiddle:http://sqlfiddle.com/#!9/1774c6/1