“不包含数字”的SQL,是否可能?

时间:2012-06-14 15:06:10

标签: sql teradata

我有一个充满行的表,每行都有一个状态和一个序列ID(以及一堆超级秘密的东西,这里不重要)。状态是指示记录当前状态的字符串,或者是指示具有该序列号的父级的子ID的id号,其将包含树的状态。基本上我们的表包含树,其中父母持有状态信息,所有孩子都包含向上指针。 (我知道它的设计非常糟糕,但这是遗留的,不值得改变。)

首先我需要的是所有家庭的所有状态列表及其序列ID。所以我需要像

这样的东西
SELECT UNIQUE status, seq_id FROM top_secret_database.government_secrets_table 
WHERE status <does not contain numerics> 

有没有人知道在sql中实现这个目的的方法?

我能做到

SELECT UNIQUE status, seq_id FROM top_secret_database.government_secrets_table 
WHERE status NOT IN (
    SELECT UNIQUE seq_id FROM top_secret_database.government_secrets_table
)

但是在这一点上我只是好奇是否有任何方法可以获得任何人都知道的sql中的'not numerics'这样的正则表达式,因为这样做会很有用。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

如果您知道数字状态ID的可接受范围,则可以使用Teradata本机CHAR2HEXINT()函数来确定列的第一个字符是字符还是数字。

SELECT CHAR2HEXINT('A')
     , CHAR2HEXINT('Z')
     , CHAR2HEXINT('0')
     , CHAR2HEXINT('1')
     , CHAR2HEXINT('9')
;

答案 1 :(得分:0)

你没有说你正在使用的WHICH sql server,所以我假设MySQL

SELECT ...
WHERE status NOT REGEXP '[0-9]'

答案 2 :(得分:0)

如果状态是不包含数字的字符串或完全数字ID,则可以使用(至少在TSQL中)ISNUMERIC函数进行过滤。