Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Tactical Nuclear Penguin Member Откуда: холодно тут Сообщений: 2732 |
что работает и не работает? результаты запросов какие? |
7 ноя 18, 16:50 [21727109] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11568 |
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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
odisssey, начнём с того, что символы в строке нумеруются с 1. Символ "_" в шаблоне для LIKE и PATINDEX имеет особый смысл: это один любой символ. Если нужно именно подчёркивание, то проще всего писать так: '%[_]Full%' |
7 ноя 18, 16:53 [21727118] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
odisssey, ну хоть добавть в условие name_back LIKE %_Full% а так у вас в минус поди уходит, вообще просто уберите SUBSTRING , и посмотрите что даёт PATINDEX('%_Full%', [name_back])-2) |
7 ноя 18, 16:54 [21727121] Ответить | Цитировать Сообщить модератору |
odisssey Member Откуда: Сообщений: 64 |
Konst_One, точно! спасибо! в выборке есть пару строк с кол-во символов 1-2. Вот читал же описание )) но не учел, спасибо! |
7 ноя 18, 16:55 [21727123] Ответить | Цитировать Сообщить модератору |
odisssey Member Откуда: Сообщений: 64 |
ну вобщем на данный момент вроде сносно, но позиция - 0, если ставить 1, то к имени БД добавляется подчерк. |
||
7 ноя 18, 17:07 [21727143] Ответить | Цитировать Сообщить модератору |
Tactical Nuclear Penguin Member Откуда: холодно тут Сообщений: 2732 |
автор явно что-то курит |
||||
7 ноя 18, 17:12 [21727155] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |