Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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在字符串变化时使用子字符串和Charindex_Sql_Sql Server_String_Tsql - Fatal编程技术网

SQL Server在字符串变化时使用子字符串和Charindex

SQL Server在字符串变化时使用子字符串和Charindex,sql,sql-server,string,tsql,Sql,Sql Server,String,Tsql,我正在做一个小项目,从字符串中提取特定的数据元素。字符串的一个示例: ABC:123-456-789-1234 description end 1/1/2015 我想提取的部分是123-456-789-1234。现在,我使用以下SQL选择该数据元素: SELECT substring(data, charindex('ABC',data)+4,16) FROM Table X 问题是字符串变化很大。例如,以下是如何提供字符串: ABC: 123-456-789-1234 descriptio

我正在做一个小项目,从字符串中提取特定的数据元素。字符串的一个示例:

ABC:123-456-789-1234 description end 1/1/2015
我想提取的部分是123-456-789-1234。现在,我使用以下SQL选择该数据元素:

SELECT substring(data, charindex('ABC',data)+4,16) FROM Table X
问题是字符串变化很大。例如,以下是如何提供字符串:

ABC: 123-456-789-1234 description end 1/1/2015
ABC:  123-456-789-1234 da1234 
ABC:  123-456-789-1234 random1234-12 1/1/2015
ABC:  123-456-789-1234,-ing  end 1/1/2015
ABC 123-456-789-1234 description end 
有没有更好的方法来捕获我想要的确切数据元素?我无法将值硬编码到子字符串中


编辑:应该说明字符串在所有实例中都不相同,即单词描述或日期是可选的

编辑:找到答案。需要替换所有内容并提取相关信息

SELECT substring(replace(replace(replace(data,' ',''),'-',''),':',''), charindex('ABC',replace(replace(replace(data,' ',''),'-',''),':',''))+3,13)

这是可行的,但我不知道你是否在寻找:

检查它:

它返回:

123-456-789-1234
123-456-789-1234
123-456-789-1234

这是可行的,但我不知道你是否在寻找:

检查它:

它返回:

123-456-789-1234
123-456-789-1234
123-456-789-1234
使用patindex而不是charindex查找字符串中出现的第一个数字,并将字符串从该数字剪切到带有空格字符的描述词开始的位置:

SELECT substring(data, patindex('%[0-9]%', data), patindex('% description%', data) - patindex('%[0-9]%', data)) FROM Table X
数据值更新后:

选择子字符串a.data,1,patindex“[^0-9-]%”,a.data-1 从…起 选择substringdata、patindex“%[0-9]”、data、lendata作为数据 来自表X a

使用patindex而不是charindex查找字符串中出现的第一个数字,并将字符串从该数字剪切到带有空格字符的描述词开始的位置:

SELECT substring(data, patindex('%[0-9]%', data), patindex('% description%', data) - patindex('%[0-9]%', data)) FROM Table X
数据值更新后:

选择子字符串a.data,1,patindex“[^0-9-]%”,a.data-1 从…起 选择substringdata、patindex“%[0-9]”、data、lendata作为数据 来自表X a

编辑:为新数据更新

返回

(No column name)
123-456-789-1234
123-456-789-1234
123-456-789-1234
123-456-789-1234
123-456-789-1234
编辑:为新数据更新

返回

(No column name)
123-456-789-1234
123-456-789-1234
123-456-789-1234
123-456-789-1234
123-456-789-1234

我不擅长使用它,但可能使用regexI我不擅长使用它,但可能使用regexI应该说明说明说明文本也会有所不同。请参阅我的更新值。我应该澄清说明文字也有所不同。请查看我的更新值