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 |
+-----------+
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
3条答案
按热度按时间mi7gmzs61#
如果您使用的是不支持字符串分割的较旧版本的sql server。反转功能很方便,如下所示。
我所做的步骤是反转字符串,获取“.”的字符位置,获取“\”的字符位置,然后对其应用substring函数在两个位置之间切片数据。最后我再次反转它以得到正确的值。
下面是一个例子
D小提琴连杆
https://dbfiddle.uk/?rdbms=sqlserver_2014&fiddle=8c0fc11f5ec813671228c362f5375126
rwqw0loc2#
您可以使用:
这会将字符串拆分为不同的组件,并匹配字符串末尾的组件。如果组件可以重复,上面的可以返回重复的。通过将更多的逻辑移到
apply
:2q5ifsrm3#
您可以只使用字符串函数(reverse、charindex、substring)。
或