1

という名前の列がありますD1_VAL

この列の行には、次のようなデータがあります。

C:10
R:200
E:3
N:77

これらの値を論理演算子で検索しようとしています。私はこれを試しました:

SELECT * FROM d1 WHERE CAST(`D1_VAL` AS UNSIGNED) > 5

行は返されません。私も試しました:

SELECT * FROM d1 WHERE (0 + `D1_VAL`) > 5

どうすればこれを適切に行うことができますか?

4

2 に答える 2

5

このクエリは、

SELECT * FROM d1 WHERE CAST(SUBSTRING(`D1_VAL`, 3) AS UNSIGNED) > 5

ただし、C:102 つの別々の列のように値を正規化することをお勧めします。

create table d1(
    letter char(1),
    number int,
    // ... other columns
)
于 2012-04-30T09:11:08.593 に答える
1

あなたがやろうとしている比較は何ですか?

数値 (コロンの右側) を 5 と比較する場合は、次のようにしてみてください。

CAST(SUBSTRING(`D1_VAL`, INSTR(`D1_VAL`, `:`)) AS UNSIGNED) > 5 

文字列関数の詳細については、こちらを参照してください。

また、データベースの設計について考えることをお勧めします。つまり、この列の内容は、char と整数の 2 つの列に格納する方がよいでしょうか? その方が効率的です。必要なディスク容量が少なくなり、クエリが高速になります。多数の行がある場合、さまざまな文字列関数を実行したり、キャストしたりすると、クエリの実行が非常に遅くなる可能性があります。

于 2012-04-30T09:17:14.140 に答える