【问题标题】:SQL Server 2005 Update/Delete Substring of a Lengthy ColumnSQL Server 2005 更新/删除长列的子字符串
【发布时间】: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 处停止,它会继续运行,并且某些结果只是空白,因此看起来像:

  1. AAA 12345 /AAA abcdefghijklmnop
  2. AAA 12346 /AAA qrstuvwxyzabcdef
  3. 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


    【解决方案1】:

    首先,检查您对 SUBSTRING() 的使用情况。第三个参数是长度,而不是结束字符,因此您需要将查询更改为:

        select substring (column, charindex ('AAA',column)
    , charindex ('/AAA',column)-charindex ('AAA',column))
     from table where column like '%/AAA%'
    

    是的,您找到它然后删除或替换它的方法是合理的。

    如果某些结果为空白,则您可能正在查找并替换整个字符串。如果它没有在其中找到正确的正则表达式,则根本不会返回该行,这与在该列中返回黑色值不同。

    【讨论】:

    • 感谢@TheTTGGuy 的快速回复!我实际上已经尝试过类似的方法,但我总是收到“传递给 SUBSTRING 函数的长度参数无效”错误。我不知道为什么它返回一个负值(至少这是我对这个错误的理解)
    • 好吧,如果您要减去 charindex 结果,请确保第一个确实存在。您可能希望在 where 子句中添加:AND 列,例如 '%AAA%',以确保获得实际上也具有起始字符串的行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多