Sql 从(smiles)字符串中查找字母,而不是从元素列表中查找

Sql 从(smiles)字符串中查找字母,而不是从元素列表中查找,sql,bioinformatics,hue,Sql,Bioinformatics,Hue,目标 如果字符串中的任何字母(原子)对大小写不敏感,而不是来自以下元素列表H、B、C、N、O、F、Al、Si、p、S、Cl,则过滤掉SMILES字符串,这是一个截断列表。总共有38个元素 背景 我有一个包含字符串的数据库: 简化分子输入行输入系统(SMILES)是一种线符号形式的规范,用于使用短ASCII字符串描述化学物种的结构 (更多信息) 例如: OC[C@H]1O[C@H]([C@H](O)[C@@H]1O)n1cnc2c(NC3CCCC3)ncnc12 这样做的目的是从数据库中去除稀有

目标

如果字符串中的任何字母(原子)对大小写不敏感,而不是来自以下元素列表
H、B、C、N、O、F、Al、Si、p、S、Cl
,则过滤掉SMILES字符串,这是一个截断列表。总共有38个元素

背景

我有一个包含字符串的数据库:

简化分子输入行输入系统(SMILES)是一种线符号形式的规范,用于使用短ASCII字符串描述化学物种的结构

(更多信息)

例如:

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

这样做的目的是从数据库中去除稀有元素和有机金属。

任何版本的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 || '%');

像UO2这样的化合物会被上面的内部连接过滤掉,它含有列入黑名单的元素铀。

你使用的是什么版本的SQL?嗨,蒂姆,我使用的是色调。元素周期表中有118种元素。因此将有80个不允许的原子符号,这是一个很长的列表。有没有办法在['a'、'bb'、'Bc']中键入类似
的内容
?@June。。。你的38个元素的白名单也相当长。不管怎样,你都需要一些日历表的方法。我明白了。如果一次列出所有元素不起作用,我将使用其他编程语言来处理这个问题。谢谢你抽出时间!