SQL Server 2005更新/删除长列的子字符串
我不确定是否有可能做到我想做的事情,但我想我还是会尝试一下。此外,我对SQL Server世界还相当陌生,这是我的第一篇文章,因此,如果我的措辞不恰当或遗漏了信息,我深表歉意。另外,我正在使用SQLServer2005 假设我有一个名为“table”的表和一个名为“column”的列。该列的内容是一堆混乱的字符(SQL Server 2005更新/删除长列的子字符串,sql,sql-server,sql-update,substring,sql-delete,Sql,Sql Server,Sql Update,Substring,Sql Delete,我不确定是否有可能做到我想做的事情,但我想我还是会尝试一下。此外,我对SQL Server世界还相当陌生,这是我的第一篇文章,因此,如果我的措辞不恰当或遗漏了信息,我深表歉意。另外,我正在使用SQLServer2005 假设我有一个名为“table”的表和一个名为“column”的列。该列的内容是一堆混乱的字符(ntextdata type)。这些字符都是从前端应用程序中的多个输入字段中提取的。现在,其中一个输入字段是用于敏感信息的,我们不再需要这些信息,并且希望删除这些信息,但我不能删除整个专
ntext
data type)。这些字符都是从前端应用程序中的多个输入字段中提取的。现在,其中一个输入字段是用于敏感信息的,我们不再需要这些信息,并且希望删除这些信息,但我不能删除整个专栏,因为它还包含其他有价值的信息。到目前为止,我发现的大多数解决方案只处理具有短条目的列,因此它们只能更新整个字符串,但对于我的解决方案,我认为我需要确定我需要的特定子字符串的开头和结尾,并以某种方式替换或删除它。这是我最接近于选择我需要的数据。。。AAA和/AAA标记我需要的子字符串的开始和结束
select
substring (column, charindex ('AAA', column), charindex ('/AAA',column))
from table
where column like '%/AAA%'
我遇到的问题是,子字符串并没有停止在/AAA,它只是继续运行,一些结果只是空白,所以看起来像:
select substring (column, charindex ('AAA',column)
, charindex ('/AAA',column)-charindex ('AAA',column))
from table where column like '%/AAA%'
select substring(column,charindex('AAA',column),20) from table
where column like '%/AAA%'
我不确定这种方法是否会更好,因为我正在寻找的子字符串总是具有相同数量的字符。但这一行的问题是,它们不是空行,而是被该列中不相关的子字符串替换,但所有其他行都会返回我想要的结果。首先,检查子字符串()的使用情况。第三个参数是长度,而不是结束字符,因此您需要将查询更改为如下内容:
select substring (column, charindex ('AAA',column)
, charindex ('/AAA',column)-charindex ('AAA',column))
from table where column like '%/AAA%'
是的,您找到它然后删除或替换它的方法是合理的
如果某些结果为空,则可能正在查找并替换整个字符串。如果它没有在其中找到正确的正则表达式,则根本不会返回该行,这与在该列中返回黑色值不同。感谢@Thettggay的快速响应!实际上,我已经尝试过类似的方法,并且总是出现“传递给子字符串函数的长度参数无效”错误。我不明白为什么它返回一个负值(至少这是我对这个错误的理解)。如果要减去charindex结果,请确保第一个确实存在。您可能希望向where子句中添加:和列,如“%AAA%”,以确保获得的行实际上也包含起始字符串。