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

时间:2015-11-06 10:39:01

标签: sql sql-server

我正在使用SQL Server数据库。在特定列中,在某些单元格(类型为varchar)中,有一个字符:³

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

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

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

我也定期3

你能告诉我怎么做吗?我在网上抬头但我找不到我想要的东西。感谢。

2 个答案:

答案 0 :(得分: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.

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

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

编辑/更新(最终):

为了检测数据是否为大写/上标,您需要使用整理:

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

答案 1 :(得分:2)

这仅适用于使用区分大小写的排序规则,使用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