0

我有一个满是行的表,每一行都有一个状态和一个序列 ID(还有一堆在这里不重要的超级机密的东西)。status 是一个字符串,表示记录的当前状态,或者是一个 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 中获取任何正则表达式,如“非数字”,因为这样做会很有用。有什么建议么?

4

3 回答 3

2

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

SELECT CHAR2HEXINT('A')
     , CHAR2HEXINT('Z')
     , CHAR2HEXINT('0')
     , CHAR2HEXINT('1')
     , CHAR2HEXINT('9')
;
于 2012-06-14T16:13:26.040 回答
0

你没有说你使用的是哪个 sql server,所以我假设MySQL

SELECT ...
WHERE status NOT REGEXP '[0-9]'
于 2012-06-14T15:09:34.303 回答
0

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

于 2012-06-14T15:10:00.387 回答