SQL запрос на буквенно-цифровой идентификатор в шестнадцатеричном - PullRequest
0 голосов
/ 23 марта 2012

Я хочу иметь возможность различать буквенно-цифровую строку и строку в шестнадцатеричном формате.

Мой текущий запрос:

<columnName> LIKE '?_____=' + REPLICATE('[0-9A-Fa-f]',16)

Я нашел этот метод поиска шестнадцатеричных идентификаторов в Интернете, и я подумал, что он работает. Однако после получения значительно большего размера выборки я вижу высокий уровень ложноположительных результатов в моих результатах. Проблема в том, что это дает мне все результаты, которые я хочу, но также дает мне результаты, которые меня не волнуют. Например:

Я хочу увидеть:

<url>.php?mains=d7ad916d1c0396ff

но я не хочу видеть:

<url>.php?mblID=2007012422060265

Разница между двумя строками заключается в том, что 16 символов в конце, которые я хочу собрать, все числовые, а не шестнадцатеричный идентификатор. Как вы, ребята, используете, чтобы ограничить результаты только шестнадцатеричным идентификатором? Спасибо в Advnace.

UPDATE: Юрген поднял хорошую мысль, второе число может быть шестнадцатеричным значением. Не все шестнадцатеричные числа содержат [a-F]. Я хотел бы перефразировать вопрос, чтобы указать, что я ищу идентификатор с буквами и цифрами, а не только цифры.

Ответы [ 2 ]

3 голосов
/ 23 марта 2012

Самый простой способ - просто добавить отдельное предложение для этого ограничения:

    <columnName> LIKE '?_____=' + REPLICATE('[0-9A-Fa-f]',16)
AND <columnName> NOT LIKE '?_____=' + REPLICATE('[0-9]',16)
1 голос
/ 23 марта 2012

Должно быть довольно просто определить, содержит ли строка только цифры ...

Настройка тестовой таблицы:

CREATE TABLE #Temp (Data char(32)  not null)

INSERT #Temp
  values ('<url>.php?mains=d7ad916d1c0396ff')
        ,('<url>.php?mblID=2007012422060265 ')

Написать запрос:

SELECT
   right(Data, 16)             StringToCheck
  ,isnumeric(right(Data, 16))  IsNumeric
 from #Temp

Получите результаты:

StringToCheck   IsNumeric
d7ad916d1c0396ff    0
2007012422060265    1

Итак, если функция IsNumeric возвращает 0, это может быть шестнадцатеричная строка.

Это делает несколько предположений:

  • Правые 16 символов - это то, что вы хотите проверить
  • У вас всего 16 символов.Я не знаю, когда строка станет слишком длинной для проверки.
  • Нецифровый символ означает шестнадцатеричное.Есть ли вероятность того, что "Q" или "~" будут встроены в строку?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...