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应该说明说明说明文本也会有所不同。请参阅我的更新值。我应该澄清说明文字也有所不同。请查看我的更新值