我使用的是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