其中UserId
有多个客户端从ys_ar_item1
到ys_ar_item14
的14列。我必须更改或更新此表中的值,以便0应替换为1,1应替换为2,2应替换为3,最多6应替换为7,nil
应为替换为0。
例如:ys_ar_item1
应为31245而不是20134.
以下是3列的Sample表,它将适用于14的所有列。
注意 - 可以创建一个包含UserId
和14列的新表。
答案 0 :(得分:1)
这是非常糟糕的设计,你将数字存储为字符串会使事情变得困难,但我只能考虑使用这些函数IIF()
,TRY_CAST()
和REPLICATE()
:
CREATE TABLE Sample (
UserID INT,
Ys_Ar_Item1 VARCHAR(10),
Ys_Ar_Item2 VARCHAR(10),
Ys_Ar_Item3 VARCHAR(10)
-- Other columns
);
INSERT INTO Sample VALUES
(1, '20134', 'nil NULL', '02341');
SELECT UserID,
IIF(TRY_CAST(Ys_Ar_Item1 AS INT) IS NULL, '0', CAST( REPLICATE('1', LEN(Ys_Ar_Item1) ) AS INT) + CAST(Ys_Ar_Item1 AS INT)) AS Ys_Ar_Item1,
IIF(TRY_CAST(Ys_Ar_Item2 AS INT) IS NULL, '0', CAST( REPLICATE('1', LEN(Ys_Ar_Item2) ) AS INT) + CAST(Ys_Ar_Item2 AS INT)) AS Ys_Ar_Item2,
IIF(TRY_CAST(Ys_Ar_Item3 AS INT) IS NULL, '0', CAST( REPLICATE('1', LEN(Ys_Ar_Item3) ) AS INT) + CAST(Ys_Ar_Item3 AS INT)) AS Ys_Ar_Item3
FROM Sample;
注意:
在您作为图片的问题中包含的示例数据中,没有数字> 6,如果您有这样的数字,此解决方案将失败。
答案 1 :(得分:1)
如前所述,这是一个糟糕的数据库设计。 但您可以尝试以下函数来获得所需的结果:
UPDATE myTable SET ys_ar_item1=dbo.ReplaceNumbers(ys_ar_item1)
像这样使用:
Books