Как использовать условные символы SQL условно? - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь запрос, который не возвращает желаемых результатов.

SELECT [ID], [bookno], [ECN] AS [Version No], [InsertedDate] AS [Add Date]
FROM [BooksBank]
WHERE [Flag] IS NULL AND [bookno] LIKE '%60003-74P00-F%'
AND [ECN] IN 
(SELECT MAX(ECN) FROM [BooksBank]
WHERE [Flag] is NULL AND [bookno] LIKE '%60003-74P00-F%');

Он возвращает следующий результат

75822 |60003-74P00-F2_511-7434.pdf |20190527 |2019-05-28 00: 00: 00.000

вместо следующего, что также является желаемым результатом

74967 |60003-74P00-F_55S-0389.pdf |20190213 |2019-02-14 00: 00: 00.000

Это поведение технически правильно, но я хочу этот результат

60003-74P00-F_55S-0389.pdf

Пожалуйста, помогите.

Ответы [ 2 ]

2 голосов
/ 11 октября 2019

Ваш шаблон слишком любезен. Вы хотите соответствовать F_, но не соответствовать F2_

Один из способов - просто включить _ в строку, которую вы ищете. (Так как _ является символом для «любого отдельного символа», который вам нужно сделать, вам нужно «убежать» от него.)

Изменить оба шаблона на ...

'%60003-74P00-F\_%' ESCAPE '\'
1 голос
/ 11 октября 2019

Ваш поиск по шаблону '% 60003-74P00-F%' приведет к тому, что у каждой книги будет "60003-74P00-F" в качестве подстроки. Если вы хотите указать определенную книгу, вы можете использовать = вместо символа подстановки.

Вы можете попробовать это:

SELECT ID, bookno, InsertedDate AS Дата добавления, макс. (ECN) AS Номер версии, FROM BooksBank, ГДЕ [Флаг] НЕДЕЙСТВИТЕЛЕН И [bookno] = '60003-74P00-F_55S-0389.pdf 'сгруппировать по идентификатору, bookno, InsertedDate

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