Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Выборка имени файла из его пути запросом  [new]
ypmail
Member

Откуда:
Сообщений: 331
Можно ли в запросе выбрать имя файла из его пути?
Например:

C:\Folder\test.txt

Задать такие условия, чтобы получилось только значение test, но не с помощью подсчёта знаков
Left(Right(Field,8),4)
, а задав отбор части значения находящейся между \ и .
29 июн 15, 16:01    [17828894]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
Glory
Member

Откуда:
Сообщений: 104751
ypmail
, а задав отбор части значения находящейся между \ и .

Ну так найдите эту самую правую \
29 июн 15, 16:02    [17828898]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1837
ypmail,

declare @full_filename varchar(255), @filename varchar(255)
set @full_filename = 'C:\Program Files\MSSQLSERVER\something.dll'

set @filename = REVERSE(@full_filename)
select REVERSE(SUBSTRING(@filename, 1, CHARINDEX('\', @filename)-1))
29 июн 15, 16:30    [17829041]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
sega1999
Member

Откуда:
Сообщений: 9
felix_ff
ypmail,

declare @full_filename varchar(255), @filename varchar(255)
set @full_filename = 'C:\Program Files\MSSQLSERVER\something.dll'

set @filename = REVERSE(@full_filename)
select REVERSE(SUBSTRING(@filename, 1, CHARINDEX('\', @filename)-1))

Немного доработано:
declare @full_filename varchar(255), @filename varchar(255),@cFile varchar(255)
set @full_filename = 'C:\Program Files\MSSQLSERVER\something.dll'

set @filename = REVERSE(@full_filename)

set @cFile=REVERSE(SUBSTRING(@filename, 1, CHARINDEX('\', @filename)-1))

select SUBSTRING(@cFile,1,CHARINDEX('.',@cFile)-1)
29 июн 15, 16:55    [17829165]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1837
sega1999,

кстати наименованию файла ничто не мешает быть вида this_file.lol.txt
^_^
29 июн 15, 16:59    [17829191]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
sega1999
Member

Откуда:
Сообщений: 9
felix_ff,
человек спрашивал имя файла между '\' и '.'
Эти символы выделены красным цветом.
О расширении файла речь не идет
29 июн 15, 17:04    [17829217]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
пьяный тюлень
Member

Откуда:
Сообщений: 100
select reverse(stuff(substring(a.name, 1, charindex('\', a.name)-1), 1, charindex('.', a.name), ''))
from (values(reverse('C:\Folder\this_file.lol.txt '))) a(name)
29 июн 15, 17:09    [17829249]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1837
sega1999,

в данном случае .lol попадает в наименование файла а не относится к расширению

пьяный_тюлень привел конечный вариант :)
29 июн 15, 17:20    [17829319]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
sega1999
Member

Откуда:
Сообщений: 9
felix_ff,

имя файла было указано в первом сообщении.
29 июн 15, 18:23    [17829665]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
ypmail
Member

Откуда:
Сообщений: 331
А если мы не знаем этой строчки: C:\Folder\test.txt?

Есть поле Field, в котором могут быть разные значения:
C:\Folder\test.txt
D:\Folder\test1.doc
E:\Folder2\Folder\abc.exe
C:\Folder3\def.html

Должно получиться:
test
test1
abc
def

C первой частью понятно, привел к такому виду:
reverse(stuff(substring(Field, 1, charindex('\', Field)-1), 1, charindex('.', Field), ''))


А что делать с этой?
(values(reverse('C:\Folder\this_file.lol.txt '))) a(name)


Если просто указываю FROM Table, то не работает, значения пустые.
Полный неработающий код:
SELECT reverse(stuff(substring(Field, 1, charindex('\', Field)-1), 1, charindex('.', Field), ''))
FROM Table
30 июн 15, 09:15    [17831070]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
ypmail
Member

Откуда:
Сообщений: 331
В access с insrrev было удобно, а тут всё так сложно, неужели нет подобного аналога?
30 июн 15, 09:19    [17831081]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
Glory
Member

Откуда:
Сообщений: 104751
ypmail
Полный неработающий код:
SELECT reverse(stuff(substring(Field, 1, charindex('\', Field)-1), 1, charindex('.', Field), ''))
FROM Table

select reverse(stuff(substring(a.name, 1, charindex('\', a.name)-1), 1, charindex('.', a.name), ''))
from (select reverse(field) from Table) a(name)


Сообщение было отредактировано: 30 июн 15, 09:30
30 июн 15, 09:30    [17831109]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
SELECT S=REVERSE(ISNULL(SUBSTRING(S,1,NULLIF(CHARINDEX('\',S),0)-1),S)) FROM
(
 SELECT STUFF(S,1,CHARINDEX('.',S),'')
 FROM (SELECT REVERSE('C:\Folder\this_file.lol.txt '))T(S)
)T(S);
30 июн 15, 09:38    [17831134]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
iap
SELECT S=REVERSE(ISNULL(SUBSTRING(S,1,NULLIF(CHARINDEX('\',S),0)-1),S)) FROM
(
 SELECT STUFF(S,1,CHARINDEX('.',S),'')
 FROM (SELECT REVERSE('C:\Folder\this_file.lol.txt '))T(S)
)T(S);
Должен работать и если совсем нет слэша или совсем нет точки и т.д.
30 июн 15, 09:40    [17831138]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
ypmail
Member

Откуда:
Сообщений: 331
Glory,

Функции LEFT или SUBSTRING передан недопустимый параметр длины.
30 июн 15, 09:42    [17831144]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
Glory
Member

Откуда:
Сообщений: 104751
ypmail
Функции LEFT или SUBSTRING передан недопустимый параметр длины.

Значит у вас там не везде есть "путь с файлом"
30 июн 15, 09:43    [17831148]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
ypmail
Member

Откуда:
Сообщений: 331
Glory,

Верно, я думал где пустые значения должны оставаться пустые строки, а где они есть, там имена файлов из их путей.
30 июн 15, 09:54    [17831191]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
Glory
Member

Откуда:
Сообщений: 104751
ypmail
я думал где пустые значения должны оставаться пустые строки, а где они есть, там имена файлов из их путей.

А сервер как узнает про ваши "думы" ?
30 июн 15, 09:55    [17831193]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
o-o
Guest
ypmail
Glory,

Верно, я думал где пустые значения должны оставаться пустые строки, а где они есть, там имена файлов из их путей.

ни так вставьте case,
где пустая строка пусть оставляет пустую строку, а тот запрос в else
30 июн 15, 10:02    [17831226]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
- Доктор, меня не замечают ©


Ну как хотите...
30 июн 15, 10:05    [17831244]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
ypmail
Member

Откуда:
Сообщений: 331
iap,

Ваш код работает, но я его не могу под свою задачу адаптировать, где нет C:\Folder\this_file.lol.txt, T, S. А есть Field и Table. Не понимать я пока в этом, только учусь...
30 июн 15, 10:10    [17831265]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
Glory
Member

Откуда:
Сообщений: 104751
ypmail
но я его не могу под свою задачу адаптировать, где нет C:\Folder\this_file.lol.txt, T, S. А есть Field и Table.

Вам же уже показали, как "адаптировать"
30 июн 15, 10:11    [17831268]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
ypmail
iap,

Ваш код работает, но я его не могу под свою задачу адаптировать, где нет C:\Folder\this_file.lol.txt, T, S. А есть Field и Table. Не понимать я пока в этом, только учусь...
SELECT T.*
,S=(SELECT REVERSE(ISNULL(SUBSTRING(S,1,NULLIF(CHARINDEX('\',S),0)-1),S)) FROM
(SELECT STUFF(S,1,CHARINDEX('.',S),'') FROM (SELECT REVERSE(T.Field))A(S))A(S))
FROM [Table] T;
TABLE - ключевое слово. Какая необходимость использовать его для названия таблицы?
30 июн 15, 10:19    [17831295]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
ypmail
а задав отбор части значения находящейся между \ и .


тынц

with t0(fp) as
(
	select N'c:\folder1.folder1.txt\folder2\folder3\file0.txt' union all
	select N'c:\folder1.folder1.txt\folder2\folder3\file1...file1.txt' union all
	select N'c:\folder1.folder1.txt\folder2\folder3\file2...jpg' union all
	select N'c:\folder1.folder1.txt\folder2\folder3\file2...' union all
	select N'file3'
)
select
	ext.Regex_Match(fp, N'(?<=\\?)([^\\]*?)(?=(\.\w*)?\Z)', null) fn
from
	t0;



fn
------------------------------
file0
file1...file1
file2..
file2..
file3

(5 row(s) affected)
30 июн 15, 10:28    [17831349]     Ответить | Цитировать Сообщить модератору
 Re: Выборка имени файла из его пути запросом  [new]
o-o
Guest
churupaha -- почетный REGEX-маньяк
30 июн 15, 10:37    [17831399]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить