Подстановочное выражение в SQL Server - PullRequest
0 голосов
/ 08 марта 2019

Я знаю, что следующий запрос возвращает строки, которые содержат точные 5 символов между A и G

select * 
from 
     (select 'prefixABBBBBGsuffix' code /*this will be returned. */
      union 
      select 'prefixABBBBGsuffix') rex 
where 
     code like '%A_____G%' 

Но я хочу 17 символов между A и G, тогда условие like должно иметь 17 подчеркиваний. Поэтому я мало что ищу в гугле, я нашел [] будет использоваться как. Тогда я попробовал так для.

select * 
from 
    (select 'AprefixABBBBBGsuffixG' code 
     union 
     select 'AprefixABBBBGsuffixG') rex 
where 
    code like '%A[_]^17G%' /*As per my understanding, '[]' makes a set. And  
                               '^17' would be power of the set (like Mathematics).*/

Тогда он возвращает набор NULL. Как я могу искать строки с определенным количеством символов в наборе []?

Примечание:

Я использую SQL Server 2012.

Ответы [ 2 ]

2 голосов
/ 08 марта 2019

Я бы использовал REPLICATE для генерации нужного числа '_':

select * from (
  select 'prefixABBBBBGsuffix' code 
  union 
  select 'prefixABBBBGsuffix'  
) rex 
where code like '%A' + REPLICATE('_',17) + 'G%';
1 голос
/ 09 марта 2019

тот же ответ, что и ранее, но исправленный. 17 не было числом, это было 18 и 19 для строк, также для показа добавляли len (textbetween A и G).

select rex.* 
from (
    select len('prefixABBBBBGsuffix') leng, 'AprefixABBBBBGsuffixG' code 
    union 
    select len('prefixABBBBGsuffix'), 'AprefixABBBBGsuffixG'
    union
    select 0, 'A___________________G'
    ) rex 
where 
    rex.code like '%A' + replicate('_',19) + 'G%'

--and with [] the set would be [A-Za-z]. Notice this set does not match the A___________________G string.

select rex.* 
from (
    select len('prefixABBBBBGsuffix') leng, 'AprefixABBBBBGsuffixG' code 
    union 
    select len('prefixABBBBGsuffix'), 'AprefixABBBBGsuffixG'
    union
    select 0, 'A___________________G'
    ) rex 
where 
    rex.code like '%A' + replicate('[A-Za-z]',19) + 'G%'

[A-Za-z0-9] соответствует одному символу в пределах алфавита (оба случая) или цифрам от 0 до 9

Я не могу найти рабочую информацию о другом способе обработки такого количества символов, репликация - это просто способ облегчить параметризацию и ввод.

...