首页 > 解决方案 > 替换 nvarchar(50) 列中的值

问题描述

我的 SQL Server 表中有一个列是nvarchar(50). 我正在寻找一种方法来替换列中的值。

例如,这是我的原始值列:

随附的

我想要的是每个值等于以下值:

请查看第二张图片以查看所需的输出

我可以使用替换功能来解决这个问题,但是它会将它移动到我要替换的每个值的新列中。理想情况下,我希望在一个专栏中包含我的新更改。

我无法使用更新功能,因为我只有对该表的读取权限。

任何信息都会很棒。

谢谢。

标签: sqlsql-servertsqlreplacenvarchar

解决方案


样本数据

create table MyTable
(
  Task nvarchar(50)
);

insert into MyTable (Task) values
('VLV LOADING/RELEASE 1st DS'),
('VLV LOADING/RELEASE 2nd DS'),
('VLV LOADING/RELEASE 3rd DS'),
('VLV LOADING/RELEASE 1st DS'),
('VLV LOADING/RELEASE 2nd DS'),
('VLV LOADING/RELEASE 3rd DS');

解决方案

选项1

使用case表达式。

select case mt.Task
         when 'VLV LOADING/RELEASE 1st DS' then 'Proximal Release Force-S'
         when 'VLV LOADING/RELEASE 2nd DS' then 'Proximal Release Force-L'
         when 'VLV LOADING/RELEASE 3rd DS' then 'Proximal Release Force-M'
       end as Task
from MyTable mt;

选项 2

如果替换值在另一个表中可用,则使用join.

create table Task
(
  Id int,
  Task nvarchar(50),
  Description nvarchar(50)
);

insert into Task (Id, Task, Description) values
(10, 'VLV LOADING/RELEASE 1st DS', 'Proximal Release Force-S'),
(11, 'VLV LOADING/RELEASE 2nd DS', 'Proximal Release Force-M'),
(12, 'VLV LOADING/RELEASE 3rd DS', 'Proximal Release Force-L');

select t.Description as Task
from MyTable mt
join Task t
  on t.Task = mt.Task;

结果

Task
------------------------
Proximal Release Force-S
Proximal Release Force-M
Proximal Release Force-L
Proximal Release Force-S
Proximal Release Force-M
Proximal Release Force-L

小提琴以查看实际情况。


推荐阅读