SQL Server 2005更新/删除冗长列的子字符串

时间:2015-06-23 17:49:55

标签: sql sql-server sql-update substring sql-delete

我不确定是否可以做我想做的事情,但我想我还是试一试。此外,我是SQL Server世界的新手,这是我的第一篇文章,所以如果我的措辞很差或者我把信息遗漏了,我会道歉。此外,我正在使用SQL Server 2005。

我们说我有一张名为" table"和一个名为"列"列的内容是乱七八糟的字符(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

  4. 以粗体显示的字符是我需要摆脱的信息。即使第3行是空白的,它仍然包含我需要的信息,但我猜测它不会返回它,因为它之前有不同的字符数量(例如,第1行, 2和4之前可能有50个字符,但第3行可能有100个字符),至少这是我能想到的唯一原因。

    所以我认为第一步可能是实际选择正确的子字符串,然后删除它或用一个不同的,无意义的子字符串替换它,如" 111111"什么的。

    如果您需要提供更多信息,或者我不清楚任何事情,请告诉我并感谢您花时间阅读(并希望回答)我的问题!

    编辑:接近正确结果的另一个就是这样的

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

    我不确定这种方法是否会更好用,因为我要查找的子字符串总是会有相同数量的字符。但是,这个问题的问题在于,它们不是有空行,而是用该列中不相关的子串替换,但所有其他行确实返回了我想要的内容。

1 个答案:

答案 0 :(得分:0)

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

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

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

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