如何查找和更新包含上标字符的列



我使用的是SQL Server数据库。在特定的列中,在某些单元格(类型为varchar)中,存在以下字符:³

我不知道如何找到包含此字符的单元格,并将此字符替换为字符j

当我使用此查询查找单元格时:

SELECT * 
FROM table 
WHERE col LIKE '%³%'

我也有定期的3

你能告诉我怎么做这些吗?我在网上查了一下,但找不到我想要的东西。谢谢

您所需要做的就是:

UPDATE table
SET col = replace(col, N'³', 'j');

在更新/替换值之前不需要搜索行,因此不需要SELECT。你所需要做的就是UPDATE

如果您想添加更多的条件来筛选您的行,而只更新一些,您可以使用WHERE子句并指定更多的筛选器。

UPDATE table
SET col = replace(col, N'³', 'j');
WHERE col NOT LIKE '%..%'
    AND col2 ...
    AND col3 ...
etc.

您可以在简单的SELECT中使用相同的WHERE子句来查看在运行UPDATE之前将更新哪些行。

为了不遍历所有行并加快查询速度,可以添加WHERE子句来只更新包含该字符的行。

编辑/更新(最终):

为了检测数据是否为大写/上标,您需要使用排序规则:

UPDATE @t
SET col = replace(col, NCHAR(179) COLLATE SQL_Latin1_General_CP1_CS_AS, 'j');

只有当您使用区分大小写的排序规则时,这才有效,使用NCHAR(179)表示上标:

create table #t (col1 nvarchar(50) COLLATE SQL_Latin1_General_CP1_CS_AS)

INSERT INTO #t
VALUES (NCHAR(179)),('3')
UPDATE #t
    SET col1 = REPLACE(col1, NCHAR(179), 'j')
WHERE col1 like N'%' + NCHAR(179) + N'%'
SELECT *
FROM #t

**编辑正如Radu所指出的,如果表没有区分大小写的排序规则,这将起作用:

create table #t (col1 nvarchar(50))

INSERT INTO #t
VALUES (NCHAR(179)),('3')
UPDATE #t
    SET col1 = REPLACE(col1, NCHAR(179) COLLATE SQL_Latin1_General_CP1_CS_AS, 'J')
WHERE col1 like N'%' + NCHAR(179) + N'%' COLLATE SQL_Latin1_General_CP1_CS_AS
SELECT *
FROM #t

最新更新