Попытка извлечь имя файла из столбца в SQL Server - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь извлечь имя файла вместе с расширением из столбца в таблице SQL Server.

У меня есть столбец типа данных varchar 'Input_File_Details' со следующими данными:

G:\USER_DATA\XXX\DEMOGRAPHIC\GGIC_MNR_DEMO_EXTRACT20190409_00.txt
G:\USER_DATA\XXX\DEMOGRAPHIC\GGIC_MNR_DEMO_EXTRACT20190511_00.txt

Я нашел ниже запрос на SO, но он дает мне ошибку.

 select
     RIGHT(Input_File_Details,POSITION('/' IN REVERSE(Input_File_Details))-1) as processed_file_name 
from [dbo].[User_Interface_Details];

Я пытаюсь получить имя файла как:

GGIC_MNR_DEMO_EXTRACT20190409_00.txt
GGIC_MNR_DEMO_EXTRACT20190511_00.txt

Ответы [ 4 ]

4 голосов
/ 30 сентября 2019

SQL Server не поддерживает position(). Ваши строки выглядят очень согласованно отформатированными, поэтому для ваших примеров данных вы можете просто использовать:

select right(Input_File_Details, 36)

Если вы хотите получить значение из последнего \, тогда используйте:

select right(Input_File_Details, charindex('\', reverse(Input_File_Details)) - 1)
2 голосов
/ 30 сентября 2019

Попробуйте следующее:

select

              RIGHT(Input_File_Details,CHARINDEX('\',  REVERSE(Input_File_Details))-1)  as processed_file_name
    from [dbo].[User_Interface_Details];
1 голос
/ 30 сентября 2019

попробуйте, как показано ниже, используя CHARINDEX() выберите последнюю \ позицию в строке, затем выполните подстроку

with cte as
(
select 'G:\USER_DATA\XXX\DEMOGRAPHIC\GGIC_MNR_DEMO_EXTRACT20190409_00.txt' as c
union all
select 'G:\USER_DATA\XXX\DEMOGRAPHIC\GGIC_MNR_DEMO_EXTRACT20190511_00.txt'
) select right(c, CHARINDEX('\',REVERSE(c))-1) from cte

file_name
GGIC_MNR_DEMO_EXTRACT20190409_00.txt
GGIC_MNR_DEMO_EXTRACT20190511_00.txt
0 голосов
/ 30 сентября 2019

Это также должно работать:

SELECT ss.value FROM [User_Interface_Details] uid CROSS APPLY string_split(uid.Input_File_Details, '\') AS ss WHERE ss.value LIKE '%.%'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...