という名前の列があります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
どうすればこれを適切に行うことができますか?
このクエリは、
SELECT * FROM d1 WHERE CAST(SUBSTRING(`D1_VAL`, 3) AS UNSIGNED) > 5
ただし、C:102 つの別々の列のように値を正規化することをお勧めします。
create table d1(
letter char(1),
number int,
// ... other columns
)
あなたがやろうとしている比較は何ですか?
数値 (コロンの右側) を 5 と比較する場合は、次のようにしてみてください。
CAST(SUBSTRING(`D1_VAL`, INSTR(`D1_VAL`, `:`)) AS UNSIGNED) > 5
文字列関数の詳細については、こちらを参照してください。
また、データベースの設計について考えることをお勧めします。つまり、この列の内容は、char と整数の 2 つの列に格納する方がよいでしょうか? その方が効率的です。必要なディスク容量が少なくなり、クエリが高速になります。多数の行がある場合、さまざまな文字列関数を実行したり、キャストしたりすると、クエリの実行が非常に遅くなる可能性があります。