我正在使用SQL Server数据库。在特定列中,在某些单元格(类型为varchar
)中,有一个字符:³
我不知道如何找到包含此字符的单元格,并将此字符替换为字符j
。
当我使用此查询查找单元格时:
SELECT *
FROM table
WHERE col LIKE '%³%'
我也定期3
。
你能告诉我怎么做吗?我在网上抬头但我找不到我想要的东西。感谢。
答案 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