0

行でいっぱいのテーブルがあり、各行にはステータスとシーケンス 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で「数値ではない」などの正規表現を取得する方法があるかどうかに興味があります。助言がありますか?

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 サーバーを使用しているかは言わないので、MySQLを想定します。

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

ステータスが数字を含まない文字列であるか、完全に数値の ID である場合は、(少なくとも TSQL では) ISNUMERIC関数を使用してフィルター処理できます。

于 2012-06-14T15:10:00.387 に答える