Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2005更新/删除长列的子字符串_Sql_Sql Server_Sql Update_Substring_Sql Delete - Fatal编程技术网

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

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)。这些字符都是从前端应用程序中的多个输入字段中提取的。现在,其中一个输入字段是用于敏感信息的,我们不再需要这些信息,并且希望删除这些信息,但我不能删除整个专

我不确定是否有可能做到我想做的事情,但我想我还是会尝试一下。此外,我对SQL Server世界还相当陌生,这是我的第一篇文章,因此,如果我的措辞不恰当或遗漏了信息,我深表歉意。另外,我正在使用SQLServer2005

假设我有一个名为“table”的表和一个名为“column”的列。该列的内容是一堆混乱的字符(
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%'
  • AAA 12345/AAAabcdefghijklmnop
  • AAA 12346/AAAqrstuvxyzabcdef
  • AAA 12347/AAAabcdefghijklmnop

  • 粗体字是我需要处理的信息。另外,即使第3行为空,它仍然包含我需要的信息,但我猜它不会返回它,因为它前面有不同数量的字符(例如,第1、2和4行前面可能有50个字符,但第3行前面可能有100个字符),至少这是我能想到的唯一原因

    所以我想第一步可能是选择正确的子字符串,然后删除它或者用一个不同的、无意义的子字符串替换它,比如“111111”之类的

    如果需要向您提供更多信息,或者如果我对任何事情都不清楚,请让我知道,并感谢您花时间通读(并希望回答)我的问题

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

        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%”,以确保获得的行实际上也包含起始字符串。