如何为特定行更新表中的列?

时间:2019-08-11 07:32:00

标签: mysql

我想更新WHERE命令指定的行的列,但我想更新字段的方式是从每个指定的字段中提取字符串的数字部分,然后将其乘以一个数字(即我将指定),并在该列中的WHERE命令提取的所有特定字段中提供数字输出。

例如,假设我要更新列中所有与(5.6 AUD/1000, 4.5 AUD/1000, 9.7 AUD/1000)类似的字段,那么我想首先确定以/1000结尾的字段,然后乘以仅更新列中的那些字段字符串的数字部分(分别是5.6、4.5、9.7)和任何数字(例如10)。我希望该列上的其他字段保持不变。

SELECT * from sorted WHERE Column8  REGEXP '/1000$'; 

为我提供了所有我想更新的特定字段。但是我想按照上面指定的方式更新它们,也就是我要从字符串中提取数字部分,并将其与数字相乘,然后仅更新这些字段。

我能够按照我提到的条件提取所有字段,我在更新列中的这些字段时遇到了困难。

SELECT *来自已排序的WHERE Column8 REGEXP'/ 1000 $';

SELECT CAST(Column8 AS UNSIGNED)*10 FROM sorted
wHERE
 column8 REGEXP '/1000$'; 

上面的代码为我提供了必填字段,但我希望它们反映在我的专栏中。

我希望我的输出是一列,其中只有那些以'/ 1000'结尾的字段应该以字符串的数字部分乘以10的方式进行更新。

1 个答案:

答案 0 :(得分:0)

我已将名为string的varchar字段强制转换为十进制类型,并与静态值10相乘。我已经签入sql server。

DECLARE @temp TABLE
(
  string NVARCHAR(50)
)

INSERT INTO @temp (string)
VALUES 
('5.6 AUD/1000'),
('4.5 AUD/1000'),
('9.7 AUD/1000')

select cast(left(string, patindex('%[^0-9./]%', string) - 1) As decimal(18,2))* 10
from @temp