获取SQL Server中特定字符前后的名称
我在数据库中获得以下条目:获取SQL Server中特定字符前后的名称,sql,sql-server,Sql,Sql Server,我在数据库中获得以下条目: \\folder.abc\es\Folder-A\\2020-08-03\namefile.csv 因此,基本上,我想要在最后一个\之后和之前的所有内容 该示例中的namefile 提前感谢。您可以使用: select t.*, left(s.value, charindex('.', s.value)) from t cross apply string_split(t.entry, '\') s where t.entry like c
\\folder.abc\es\Folder-A\\2020-08-03\namefile.csv
因此,基本上,我想要在最后一个\
之后和
之前的所有内容
该示例中的namefile
提前感谢。您可以使用:
select t.*,
left(s.value, charindex('.', s.value))
from t cross apply
string_split(t.entry, '\') s
where t.entry like concat('%', s.value);
这会将字符串拆分为不同的组件,并匹配字符串末尾的组件。如果组件可以重复,则上述内容可以返回重复项。通过将更多逻辑移到应用
,可以轻松解决这一问题:
select t.*, s.val
from t cross apply
(select top (1) left(s.value, charindex('.', s.value)) as val
from string_split(t.entry, '\') s
where t.entry like concat('%', s.value)
) s
如果您使用的是不支持字符串分割的较旧版本的SQL server。反转功能很方便,如下所示 我所做的步骤是反转字符串,获取“.”的字符位置,获取“\”的字符位置,然后对其应用子字符串函数在两个位置之间切片数据。最后,我再次反转它以获得正确的值 这里有一个例子
with data
as(select '\\folder.abc\es\Folder-A\\2020-08-03\namefile.csv' as col
)
select reverse(substring(reverse(col)
,charindex('.',reverse(col))+1
,charindex('\',reverse(col))
-
charindex('.',reverse(col))-1
)
) as file_name
from data
+-----------+
| file_name |
+-----------+
| namefile |
+-----------+
双联杆
您可以只使用字符串函数(REVERSE、CHARINDEX、SUBSTRING) 或
那你问什么?你试过的不起作用,或者10-100个你不明白的例子,我们可以试着详细说明。但是我可以在数据库中有多个同名的入口,并给出错误,“子查询返回了多个值。当子查询在=、!=、=或者,当子查询用作表达式“您是否可以通过编辑问题共享您正在尝试的确切SQL语句。子查询错误与您提出的问题无关?”
SELECT
REVERSE(
SUBSTRING(REVERSE('\\folder.abc\es\Folder-A\\2020-08-03\namefile.csv'),
CHARINDEX('.',REVERSE('\\folder.abc\es\Folder-A\\2020-08-03\namefile.csv'))+1,
CHARINDEX('\',REVERSE('\\folder.abc\es\Folder-A\\2020-08-03\namefile.csv'))-
CHARINDEX('.',REVERSE('\\folder.abc\es\Folder-A\\2020-08-03\namefile.csv'))-1))
SELECT
REVERSE
(
SUBSTRING( --get filename
reverse(path), --to get position last \
CHARINDEX('.',reverse(path))+1,
CHARINDEX('\',reverse(path))- CHARINDEX('.',reverse(path))-1)
)