SQL where';不包含数字';,可能吗?
我有一个满是行的表,每行都有一个状态和一个序列id(还有一堆超级机密的东西,在这里并不重要)。状态可以是一个字符串,指示记录的当前状态,也可以是一个id号,指示它是具有该序列号的父项的子项,父项将包含树的状态。基本上,我们的表包含树,其中父级保存状态信息,所有子级包含向上指针。(我知道它的设计很糟糕,但它是传统的,还不值得改变。) 首先,我需要的是我们所有家庭的所有状态列表,以及他们的序列ID。所以我需要像这样的东西SQL where';不包含数字';,可能吗?,sql,teradata,Sql,Teradata,我有一个满是行的表,每行都有一个状态和一个序列id(还有一堆超级机密的东西,在这里并不重要)。状态可以是一个字符串,指示记录的当前状态,也可以是一个id号,指示它是具有该序列号的父项的子项,父项将包含树的状态。基本上,我们的表包含树,其中父级保存状态信息,所有子级包含向上指针。(我知道它的设计很糟糕,但它是传统的,还不值得改变。) 首先,我需要的是我们所有家庭的所有状态列表,以及他们的序列ID。所以我需要像这样的东西 SELECT UNIQUE status, seq_id FROM top_s
SELECT UNIQUE status, seq_id FROM top_secret_database.government_secrets_table
WHERE status <does not contain numerics>
但在这一点上,我只是好奇是否有任何方法可以在sql中获得任何像“not numerics”这样的正则表达式,因为这样做会很有用。有什么建议吗?您没有说您使用的是哪台sql server,所以我假设:
如果状态是不包含数字的字符串或完全数字Id,则可以使用(至少在TSQL中)函数进行筛选。如果知道数字状态Id的可接受范围,则可以使用Teradata native
CHAR2HEXINT()
函数确定列的第一个字符是字符还是数字
SELECT CHAR2HEXINT('A')
, CHAR2HEXINT('Z')
, CHAR2HEXINT('0')
, CHAR2HEXINT('1')
, CHAR2HEXINT('9')
;
如果你能告诉我们这是什么数据库,它的Teradata,这往往是非常有限的…REGEX将在Teradata 14中提供。如果允许您将UDF添加到环境中,可以从Teradata Developer Exchange下载一些UDF,这些UDF为您提供IsNumeric()功能。
SELECT ...
WHERE status NOT REGEXP '[0-9]'
SELECT CHAR2HEXINT('A')
, CHAR2HEXINT('Z')
, CHAR2HEXINT('0')
, CHAR2HEXINT('1')
, CHAR2HEXINT('9')
;