Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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 在可变长度字符串的两个不同分隔符后面和前面拉文本?_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 在可变长度字符串的两个不同分隔符后面和前面拉文本?

Sql 在可变长度字符串的两个不同分隔符后面和前面拉文本?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在试图弄清楚我需要编写哪种类型的SELECT,以便提取一个字符串,该字符串在一个特定字符之后开始,在另一个字符之后结束。我的数据如下: Path ------------------------------------------------------ \1231254-0000001000-14671899.PDF \74-0000001001-14672073.PDF \65551-0000001001-14672929.PDF 我需要返回以下内容,第二个破折号之后和句点之前的字符

我正在试图弄清楚我需要编写哪种类型的
SELECT
,以便提取一个字符串,该字符串在一个特定字符之后开始,在另一个字符之后结束。我的数据如下:

Path
------------------------------------------------------
\1231254-0000001000-14671899.PDF
\74-0000001001-14672073.PDF
\65551-0000001001-14672929.PDF
我需要返回以下内容,第二个破折号之后和句点之前的字符

ID
------------------------------------------------------
14671899
14672073
14672929
我知道我需要使用一些
LEN
之类的变体,但考虑到路径长度可能不同,我很难掌握如何最好地利用它们


任何帮助都将不胜感激

如果列的格式一致,可以使用
子字符串
charindex


您可以使用
PARSENAME(REPLACE())
执行以下操作:

 SELECT PARSENAME(REPLACE(path, '-', '.'), 2) FROM tableName

PARSENAME()
获取一个字符串,并将其按句点字符拆分
,然后返回位于第二个参数位置的标记

您也可以尝试使用rtrim/ltrim(只要长度始终相同):


谷歌搜索并了解TSQL中的PATINDEX()和SUBSTRING()函数。我认为您可能指的是从tableNameNow中选择PARSENAME(替换(路径“-”,“.”),2),这很聪明+1令人欣慰的是,这项工作非常完美,而且比我想象的要简单得多。非常感谢。OP表示长度各不相同总长度各不相同,但是如果重要的部分不相同,您可以使用此选项。
 SELECT PARSENAME(REPLACE(path, '-', '.'), 2) FROM tableName
select (ltrim(rtrim(path, 12),8)..