如何用select语句仅查找和替换搜索字符串后的下一个单词?
例如:
“用户Smith先生帮了我很多”->输出:“用户X先生帮了我很多”
搜索字符串是“ Mr”,姓氏很多(出于数据保护的原因)。
谢谢:)
答案 0 :(得分:1)
我不确定您问的是正确的问题。 用“替换下一个单词”,您将遇到问题。 从您的示例的外观来看,这是来自最终用户的自由文本输入(假设VARCHAR(MAX)),并且很难预测最终用户可以输入的版本。 因此,您可以找到搜索项; -史密斯先生
您还会遇到“下一个单词”的问题,双桶名称,连字符或什至包含撇号的名称(例如史密斯·卡洛尔先生/史密斯·卡洛尔先生/奥卡洛尔先生)会怎样? 您想在什么时候结束下一个单词?下一个空间?下一个非姓氏?您是否有所有姓氏清单可用来对照?
您确实需要对数据库进行加密,以确保100%确保不会意外替换任何数据。 使其成为协议,禁止在自由文本框中使用实际名称,即从现在开始让最终用户在文本框中键入“ Mr X”,但是加密似乎是您最好/最安全的选择。
答案 1 :(得分:0)
使用MSSQL的 STUFF()功能。 STUFF()
答案 2 :(得分:0)
下面是一个查询,它将帮助您提取所需的结果。 注意:-我使用的是“ 地址街道”列,您可以用“ 您的列”和“ Box ”用“ 先生。
WITH CTE AS (
SELECT SUBSTRING(addressstreet ,1,(CHARINDEX(' BOX ',addressstreet + ' ')-1))TEST0,REPLACE(SUBSTRING([addressstreet], CHARINDEX('BOX ', [addressstreet]), LEN([addressstreet])),'BOX','')test, addressstreet FROM [dbo].[Vendor]
where addressstreet like '% BOX %')
,CTE2 AS(
SELECT TEST0, ltrim(stuff(TEST,1,charindex(' ',TEST),''))TEST1, ADDRESSSTREET FROM CTE
)
SELECT TEST0 + ' Mr X '+ ltrim(stuff(TEST1,1,charindex(' ',TEST1),'')) RequiredOutput, ADDRESSSTREET from cte2
此SQL语句不是性能最佳查询,但是您可以实现目标。
输出:-
RequiredOutput AddressStreet
P.O. Mr X Street Plaza P.O. BOX 32109 Street Plaza