2012-06-14 18 views
0

我有一個充滿行的表,每行都有一個狀態和一個序列id(和一堆超級祕密東西,這裏不重要)。狀態是一個表示記錄當前狀態的字符串,或者是一個id號碼,表示它是具有該序號的父親的子女,他將包含樹的狀態。基本上我們的桌子包含樹木,父母持有狀態信息,所有孩子都包含向上的指針。 (這是我設計的非常糟糕的設計,但它是傳統的,並且不值得改變。)其中'不包含數字'的SQL,有可能嗎?

首先我需要的是我們所有家族的所有狀態以及它們的序列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 
) 

但在這一點上,我只是好奇,如果有什麼辦法讓任何正則表達式,如「不NUMERICS」在任何人的,因爲這將是有益的知道SQL完成線。有什麼建議麼?

+0

,如果你告訴我們的數據庫是這個 – lanzz

+0

其Teradata的,這往往是相當限制... – gbtimmon

+2

正則表達式將在Teradata的14有這將有助於UDF的可下載軟件,爲您提供則IsNumeric( )功能從Teradata開發人員交換,如果您被允許添加UDF到您的環境。 –

回答

2

如果您知道數字狀態ID的可接受範圍,則可以使用Teradata本機CHAR2HEXINT()函數來確定該列的第一個字符是字符還是數字。

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

你不說你正在使用的SQL Server,所以我要去承擔MySQL

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

如果狀態爲不含有數字,或全數字ID字符串,您可以使用(至少在TSQL中)ISNUMERIC函數進行過濾。

相關問題