Найти букву алфавита из строки (улыбается), а не из списка элементов

#sql #bioinformatics #hue

#sql #биоинформатика #оттенок

Вопрос:

ЦЕЛЬ

Отфильтруйте строки СМАЙЛОВ если какая-либо буква алфавита (атомы) в строке, нечувствительная к заглавным буквам, не входит в следующий список элементов H, B, C, N, O, F, Al, Si, P, S, Cl , это усеченный список. Всего 38 элементов.

ПРЕДЫСТОРИЯ

У меня есть база данных, содержащая строки СМАЙЛОВ:

Упрощенная система ввода строк с молекулярным вводом (SMILES) представляет собой спецификацию в виде линейной нотации для описания структуры химических соединений с использованием коротких строк ASCII.

(Дополнительная информация Ссылка на Википедию)

Пример СМАЙЛОВ:

 OC[C@H]1O[C@H]([C@H](O)[C@@H]1O)n1cnc2c(NC3CCCC3)ncnc12
  

Целью этого было избавиться от редких элементов и металлоорганических соединений из базы данных.

Комментарии:

1. Какую версию SQL вы используете?

2. Привет, Тим, я использую Hue.

Ответ №1:

Одним из общих подходов, который будет работать на любой версии SQL, будет создание таблицы, содержащей черный список запрещенных атомарных символов. Смайлы, которые будут сохранены, будут теми, которые не соответствуют ни одному символу элемента, занесенного в черный список.

 WITH disallowed AS (
    SELECT 'He' AS symbol UNION ALL
    SELECT 'Li' UNION ALL
    SELECT 'Be' UNION ALL
    SELECT 'Ne' UNION ALL
    ...
    SELECT 'Lr'
)

SELECT t1.smile
FROM yourTable t1
WHERE NOT EXISTS (SELECT 1 FROM disallowed t2
                  WHERE t1.smile LIKE '%' || t2.symbol || '%');
  

Соединение, такое как UO 2, будет отфильтровано указанным выше внутренним соединением, в котором содержится элемент uranium, занесенный в черный список.

Комментарии:

1. В периодической таблице 118 элементов. Таким образом, будет 80 недопустимых атомарных символов, что является длинным списком для ввода. Есть ли способ ввести что-то вроде not in ['a', 'bb', 'Bc'] ?

2. @Июнь … и ваш белый список из 38 элементов также довольно длинный. В любом случае, здесь вам нужен какой-то подход к календарной таблице.

3. Я вижу. Если перечисление всех элементов сразу не сработает, я бы использовал другие языки программирования для решения проблемы. Спасибо за ваше время!