【发布时间】:2015-09-09 16:11:27
【问题描述】:
我不确定是否可以做我想做的事情,但我想我还是会试一试。另外,我对 SQL Server 世界还很陌生,这是我的第一篇文章,所以如果我的措辞不佳或遗漏了信息,我深表歉意。另外,我正在使用 SQL Server 2005。
假设我有一个名为“table”的表和一个名为“column”的列,列的内容是一堆乱七八糟的字符(ntext 数据类型)。这些字符都是从前端应用程序的多个输入字段中提取的。现在,其中一个输入字段是用于我们不再需要并希望删除的敏感信息,但我不能只删除整个列,因为它还包含其他有价值的信息。到目前为止,我发现的大多数解决方案只处理具有短条目的列,因此它们只能更新整个字符串,但对于我来说,我认为我需要确定我需要的特定子字符串的开头和结尾并以某种方式替换或删除它。这是我最接近的至少选择我需要的数据... AAA 和 /AAA 标记我需要的子字符串的开头和结尾。
select
substring (column, charindex ('AAA', column), charindex ('/AAA',column))
from table
where column like '%/AAA%'
我遇到的问题是子字符串不会在 /AAA 处停止,它会继续运行,并且某些结果只是空白,因此看起来像:
- AAA 12345 /AAA abcdefghijklmnop
- AAA 12346 /AAA qrstuvwxyzabcdef
AAA 12347 /AAA abcdefghijklmnop
粗体字是我需要删除的信息。此外,即使第 3 行是空白的,它仍然包含我需要的信息,但我猜它没有返回它,因为它前面有不同数量的字符(例如,第 1、2 和 4 行前面可能有 50 个字符,但第 3 行前面可能有 100 个字符),至少这是我能想到的唯一原因。
所以我想第一步可能是实际选择正确的子字符串,然后删除它或用不同的、无意义的子字符串替换它,例如“111111”或其他东西。
如果需要向您提供更多信息,或者如果我有任何不清楚的地方,请告诉我,感谢您抽出时间阅读(并希望能回答)我的问题!
编辑:另一个接近正确结果的方法是这样的
select substring(column,charindex('AAA',column),20) from table
where column like '%/AAA%'
我不确定这种方法是否会更好,因为我正在寻找的子字符串总是具有相同数量的字符。不过,这一行的问题在于,它们不是有空白行,而是被该列中不相关的子字符串替换,但所有其他行确实返回了我想要的内容。
【问题讨论】:
标签: sql sql-server sql-update substring sql-delete