0

たとえば、テーブル'mark'に列'pointer'があるとします。列には、次のようなレコード (TEXT) があります。

1. 0, 100, 200, 300, 400, 500
2. 500, 600, 700, 800, 900, 1000
3. 1000, 1100, 1200, 1300, 1400, 1500

数値 (int) が範囲内にあるレコード (テキスト) を選択する方法はありますか?

ここには 2 つのシナリオがあります。

ケース 1: 数値250を指定すると、SELECT はレコード 1を返す必要があります。

ケース 2: 番号1000を指定すると、SELECT はレコード 3を返す必要があります。

4

3 に答える 3

1

SQLite の組み込み SQL 関数を使用して、可変サイズのリストから最後の番号を抽出することはできません。

最小値と最大値を別々の列に格納するようにテーブルを変更する必要があります。その後、あなたは簡単に行うことができます

SELECT * FROM mark WHERE x BETWEEN pointerMin AND pointerMax
于 2013-10-07T14:33:58.720 に答える
1

さて、これは私が書いた中で最もクレイジーな SQL です。

SELECT pointer, 250 as X
FROM mark 
WHERE CAST(SUBSTR(pointer, 0, LENGTH(pointer) - LENGTH(LTRIM(pointer, "0123456789")) + 1) AS INT) <= X AND
X < CAST(SUBSTR(pointer, LENGTH(RTRIM(pointer, "0123456789"))) AS INT)

LTRIMandを使用しRTRIMて最初または最後の数字を削除し、長さの計算を行って部分文字列インデックスを計算します。

それも実際に機能します。

それでも、データベースの設計を再考することを強くお勧めします。

于 2013-10-07T14:56:12.003 に答える
0

組み込みの後方参照INSTRがないため、このクエリは正気ではありません!!!

正確に 6 フィールドの場合、次のようになります。

SELECT ROWID FROM mark WHERE 250 >= CAST(SUBSTR(pointer,1, INSTR(pointer, ",")-1) AS
INT) AND 250<CAST(SUBSTR(SUBSTR(SUBSTR(SUBSTR(SUBSTR(pointer,INSTR(pointer,",")+1),
INSTR(SUBSTR(pointer,INSTR(pointer,",")+1),",")+1), INSTR(SUBSTR(SUBSTR(pointer,
INSTR(pointer,",")+1),INSTR(SUBSTR(pointer,INSTR(pointer,",")+1),",")+1),",")+1),
INSTR(SUBSTR(SUBSTR(SUBSTR(pointer,INSTR(pointer,",")+1),INSTR(SUBSTR(pointer,
INSTR(pointer,",")+1),",")+1),INSTR(SUBSTR(SUBSTR(pointer,INSTR(pointer,",")+1),
INSTR(SUBSTR(pointer,INSTR(pointer,",")+1),",")+1),",")+1),",")+1),INSTR(SUBSTR(
SUBSTR(SUBSTR(SUBSTR(pointer,INSTR(pointer,",")+1),INSTR(SUBSTR(pointer,
INSTR(pointer,",")+1),",")+1),INSTR(SUBSTR(SUBSTR(pointer,INSTR(pointer,",")+1),
INSTR(SUBSTR(pointer,INSTR(pointer,",")+1),",")+1),",")+1),INSTR(SUBSTR(SUBSTR(
SUBSTR(pointer,INSTR(pointer,",")+1),INSTR(SUBSTR(pointer,INSTR(pointer,",")+1)
,",")+1),INSTR(SUBSTR(SUBSTR(pointer,INSTR(pointer,",")+1),INSTR(SUBSTR(pointer,
INSTR(pointer,",")+1),",")+1),",")+1),",")+1),",")+1) AS INT);

これの代わりに問題のある計算された一時テーブルを使用することをお勧めします...

于 2013-10-07T14:35:54.340 に答える