SQL Server:更新以仅匹配和替换确切的单词

2023-12-09

我想匹配一个确切的单词并将其替换为另一个单词。

这是我正在使用的 SQL Server 查询:

UPDATE BODYCONTENT 
SET BODY = CAST(REPLACE(CAST(BODY AS NVARCHAR(MAX)), 'Test' , 'prod') AS NTEXT) 
WHERE BODY COLLATE Latin1_General_CI_AS LIKE '%Test%' COLLATE Latin1_General_CI_AS;

这个查询正在做什么:

'Test','test','TEST' 更新为 'prod'——这是预期的。

'Test2'、'TestTest'、'Fastest' 已更新为 'prod' - 我想避免这种行为。

请帮忙。

我尝试过但没有成功的其他查询:

UPDATE BODYCONTENT 
SET BODY = CAST(REPLACE(CAST(BODY AS NVARCHAR(MAX)), 'Test' , 'prod') AS NTEXT) 
WHERE BODY COLLATE Latin1_General_CI_AS LIKE '%[^A-Za-z0-9]Test[^A-Za-z0-9]%' COLLATE Latin1_General_CI_AS;

当我使用以下查询选择“测试”时:

SELECT * 
FROM dbo.BODYCONTENT 
WHERE CONVERT(NVARCHAR(MAX), BODY) = N'Test';

它没有返回任何东西。但我可以使用以下查询获得结果:

  SELECT BODY 
  FROM dbo.BODYCONTENT 
  WHERE BODY LIKE '%Test%';

  SELECT BODY 
  FROM dbo.BODYCONTENT 
  WHERE BODY COLLATE Latin1_General_CI_AS like '%TEST%' COLLATE Latin1_General_CI_AS;

这是列值:

Test testtest Test1 Test TEST

预期结果:

prod testtest Test1 prod prod

当前结果:

prod prodprod prod1 prod prod

我的印象是所有不同版本test位于同一行值内,这就是为什么您声明建议的like 'test'不管用。

基于此,下面的内容相当丑陋,但可以满足您的要求:

declare @t table(s ntext);
insert into @t values('Test testtest Test1 Test TEST');

select s as Original
        ,ltrim(rtrim(replace(
                            replace(
                                    replace(N' ' + cast(s as nvarchar(max)) + N' '  -- Add a single space before and after value,
                                            ,' ','<>'                               -- then replace all spaces with any two characters.
                                            )
                                    ,'>test<','>prod<'      -- Use these two characters to identify single instances of 'test'
                                    )
                            ,'<>',' '       -- Then replace the delimiting characters with spaces and trim the value.
                            )
                    )
            ) as Updated
from @t;

Output:

+-------------------------------+-------------------------------+
|           Original            |            Updated            |
+-------------------------------+-------------------------------+
| Test testtest Test1 Test TEST | prod testtest Test1 prod prod |
+-------------------------------+-------------------------------+

指某东西的用途<>代替空格是由于 SQL Server 的默认行为是忽略字符串比较中的尾随空格。这些可以是任意两个角色,但我发现它们在美学上令人愉悦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server:更新以仅匹配和替换确切的单词 的相关文章

随机推荐

  • 在分组数据框中选择具有公共 ID 的行

    我正在寻找以下问题的更简单的解决方案 这是我的设置 test lt tibble tribble group name id name varA varB groupA id 1 1 a groupA id 2 4 f groupA id
  • 如何以编程方式确定 iPhone 上的默认铃声?

    有没有办法在我的应用程序中确定用户 iPhone 上已将哪种铃声设置为默认铃声 如果是这样 该怎么办 Users nikhil dhamsania Library Application Support iPhone Simulator U
  • 如何在android中对JSONArray进行排序

    如何在 android 上按标签名称对 JSONArray 进行升序和降序排序 在我的应用程序中 我有一个如下所示的 JSON 需要根据用户选项显示数据 按 user id 标签按升序或降序排序 我将 JSON 解析如下 JSONObjec
  • MultipleActiveResultSets=True 或多个连接?

    我有一些 C 其中我在连接上创建了一个读取器 ExecuteReader 然后对于该读取器中的每一行 执行另一个命令 使用ExecuteNonQuery 在这种情况下我最好使用MultipleActiveResultSets True在我的
  • 如何在任务窗格应用程序中使用 OfficeJ 获取/读取自定义文档属性?

    我已从服务器和任务窗格应用程序中添加了自定义文档属性 TemplateId 当文档打开时我想获取此属性自定义文档属性 见图 使用 OfficeJs 使用 OfficeJs 版本 1 1 目前没有 OfficeJS API 允许您读取自定义文
  • 继承 std::ostream

    我想定义从 std ostream 公开继承的 MyOStream 假设我想实现我自己的 ofstream 如何才能做到这一点 我将很高兴获得任何帮助 编码示例或任何相关链接 thanks 我不明白你到底想在这里完成什么 用户代码不应从流本
  • python 解析日志文件

    我有一个包含任意行数的日志文件 我需要的只是从日志文件中提取一行数据 该数据以字符串 Total 开头 我不想要文件中的任何其他行 我该如何为此编写一个简单的Python程序 这就是我的输入文件的样子 TestName id eno TPS
  • C# 与 MySQL INSERT 参数

    大家好 我正在使用 Visual C 2010 和 MySQL 版本 5 1 48 社区 我希望你能帮助我处理这段代码 我发现它对我不起作用 我缺少什么 string connString ConfigurationManager Conn
  • 如何检查某个元素是否在 std::set 中?

    如何检查某个元素是否在集合中 是否有与以下代码等效的更简单的代码 myset find x myset end 从 C 20 开始 您可以使用contains检查许多 STL 容器中是否存在 例如std map std set const
  • 在 XSD 中哪里放置 xs:unique 约束?

    我正在使用 XSD 进行 XML 验证 我想为以下添加唯一值约束input元素 我有这样的 XML 格式
  • PyAudio 一次播放多个声音

    如何使用 PyAudio 将两种声音混合为一种 我浏览了整个互联网 但没有人回答这个问题 我也在考虑使用 audiolab 或 swMixer 但它们不支持 Python 3 4 我正在考虑将它们的字节字符串转换为 numpy 数组 将其与
  • fread 和带有尾部反斜杠的列

    我在 fread 使用 作为目录分隔符读取一列目录路径时遇到问题 问题是尾随目录分隔符在 fread 中引发错误 对于下面的 csv 文件示例 file size windows user 123 fread 和 read csv 都同意并
  • Sqlplus打印结果两次并带有空行

    我写shell脚本并想使用sqlplus 当我写 bin bash result sqlplus s user pass DB lt lt EOF set trimspool on set linesize 32000 SET SPACE
  • 如何在 C#.NET 中创建控件数组?

    我有一个包含几个标准控件 文本框 按钮等 的表单 我想将某些控件分组到集合中 以便我可以在任何给定时间启用和禁用它们 而无需显式设置每个控件 这样做的语法是什么 这是一些伪代码来展示我想要做的事情 Control ControlCollec
  • 限制所有 Linux 命令的输出

    我正在寻找一种方法来限制 Linux 中所有命令行程序产生的输出量 并且最好在限制时告诉我 我正在使用一台显示器有延迟的服务器 有时我会不小心运行一个向终端输出大量文本的命令 例如cat在一个大文件上或ls在包含许多文件的目录上 然后我必须
  • DIV 垂直浮动 DIV 从上到下按行排列

    我试图在容器内从上到下垂直定位 DIV 容器的垂直高度应限制为 500 像素 所有不符合此限制的 DIV 都应浮动到下一行 div div div div
  • 如何读取jqgrid中的userData?

    我需要通过userData to jqgrid 但找不到任何如何执行此操作的示例 这是我的尝试 从服务器发送 total 25 page currentpage userData foo bar rows myRows 在 jqgrid 中
  • 在windows后台运行bat文件

    我需要在 Windows 后台运行一个 bat 文件 我尝试过使用START命令 问题是 我远程连接到这台机器 如果我注销 那么该进程就会被终止 即使我从远程计算机注销后 有什么方法可以保持 bat 文件运行吗 提前致谢 Srvany ht
  • 您最喜欢的 C# 扩展方法是什么? (codeplex.com/extensionoverflow)

    Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 让我们列出一个答案列表 您可以在其中发布您的优秀和最喜欢的答案扩展方法 要求是必须发布完整的代码以及示例和如何使用它的解释 基于对
  • SQL Server:更新以仅匹配和替换确切的单词

    我想匹配一个确切的单词并将其替换为另一个单词 这是我正在使用的 SQL Server 查询 UPDATE BODYCONTENT SET BODY CAST REPLACE CAST BODY AS NVARCHAR MAX Test pr