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

Откуда:
Сообщений: 64
Строковые функции Left и SUBSTRING почему то не работает отнимание.
Что я делаю не так?
[name_back] - содержит наименование бэкапа namebd_Full_date.bak

Работает
SELECT [id]
,[date_ins]
,[date_back]
,[path]
,[name_back]
,SUBSTRING([name_back],0,(PATINDEX('%_Full%', [name_back])+2))
FROM [dbo].[backups_depth]
GO
Не работает
SELECT [id]
,[date_ins]
,[date_back]
,[path]
,[name_back]
,SUBSTRING([name_back],0,(PATINDEX('%_Full%', [name_back])-2))
FROM [dbo].[backups_depth]
GO
7 ноя 18, 16:45    [21727102]     Ответить | Цитировать Сообщить модератору
 Re: Left и SUBSTRING , не работает отнимание  [new]
Tactical Nuclear Penguin
Member

Откуда: холодно тут
Сообщений: 2730
что работает и не работает? результаты запросов какие?
7 ноя 18, 16:50    [21727109]     Ответить | Цитировать Сообщить модератору
 Re: Left и SUBSTRING , не работает отнимание  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
SUBSTRING ( expression ,start , length )

length
Положительное целое число или выражение типа bigint, указывающее количество символов выражения expression, которое будет возвращено. Если значение length отрицательно, возникает ошибка и выполнение инструкции прерывается. Если сумма start и length больше количества символов в expression, то возвращается целочисленное выражение значения, начинающееся со значения start.

https://docs.microsoft.com/ru-ru/sql/t-sql/functions/substring-transact-sql?view=sql-server-2017
7 ноя 18, 16:52    [21727113]     Ответить | Цитировать Сообщить модератору
 Re: Left и SUBSTRING , не работает отнимание  [new]
odisssey
Member

Откуда:
Сообщений: 64
во втором случае выдает ошибку
Msg 537, Level 16, State 3, Line 17
Invalid length parameter passed to the LEFT or SUBSTRING function.

в первом нормально отрабатывает, так как и должен - выдает нужное кол-во символов с учетом добавления.
7 ноя 18, 16:53    [21727115]     Ответить | Цитировать Сообщить модератору
 Re: Left и SUBSTRING , не работает отнимание  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
odisssey,

начнём с того, что символы в строке нумеруются с 1.

Символ "_" в шаблоне для LIKE и PATINDEX имеет особый смысл: это один любой символ.
Если нужно именно подчёркивание, то проще всего писать так: '%[_]Full%'
7 ноя 18, 16:53    [21727118]     Ответить | Цитировать Сообщить модератору
 Re: Left и SUBSTRING , не работает отнимание  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
odisssey,

ну хоть добавть в условие
name_back LIKE %_Full%

а так у вас в минус поди уходит, вообще просто уберите SUBSTRING , и посмотрите что даёт PATINDEX('%_Full%', [name_back])-2)
7 ноя 18, 16:54    [21727121]     Ответить | Цитировать Сообщить модератору
 Re: Left и SUBSTRING , не работает отнимание  [new]
odisssey
Member

Откуда:
Сообщений: 64
Konst_One,
точно! спасибо! в выборке есть пару строк с кол-во символов 1-2.
Вот читал же описание )) но не учел, спасибо!
7 ноя 18, 16:55    [21727123]     Ответить | Цитировать Сообщить модератору
 Re: Left и SUBSTRING , не работает отнимание  [new]
odisssey
Member

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

начнём с того, что символы в строке нумеруются с 1.

Символ "_" в шаблоне для LIKE и PATINDEX имеет особый смысл: это один любой символ.
Если нужно именно подчёркивание, то проще всего писать так: '%[_]Full%'


ну вобщем на данный момент вроде сносно, но позиция - 0, если ставить 1, то к имени БД добавляется подчерк.
7 ноя 18, 17:07    [21727143]     Ответить | Цитировать Сообщить модератору
 Re: Left и SUBSTRING , не работает отнимание  [new]
Tactical Nuclear Penguin
Member

Откуда: холодно тут
Сообщений: 2730
odisssey
iap
odisssey,

начнём с того, что символы в строке нумеруются с 1.

Символ "_" в шаблоне для LIKE и PATINDEX имеет особый смысл: это один любой символ.
Если нужно именно подчёркивание, то проще всего писать так: '%[_]Full%'


ну вобщем на данный момент вроде сносно, но позиция - 0, если ставить 1, то к имени БД добавляется подчерк.


автор явно что-то курит
7 ноя 18, 17:12    [21727155]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить