2

文字を含むがアルファベット順ではない 2 つの文字列フィールドを比較する必要があります。

私はこの順序に従ってそれらを比較したい:

"J" "L" "M" "N" "P" "Q" "R" "S" "T" "H" "V" "W" "Y" "Z"

したがって、H と T を比較すると、H は T よりも大きくなります (アルファベット順とは異なります)。

そして、値が 'H' (> 'H') より大きいかどうかをテストすると、値 ("V" "W" "Y" "Z") を含むすべてのエントリが取得されます (これもアルファベット順とは異なります)。

1 つの SQL クエリでこれを達成するにはどうすればよいですか?

ありがとう

4

2 に答える 2

3
SELECT *
FROM yourtable
WHERE
  FIELD(col, 'J', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'H', 'V', 'W', 'Y', 'Z') >
  FIELD('H', 'J', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'H', 'V', 'W', 'Y', 'Z')
         ^ your value

またはまた:

SELECT *
FROM yourtable
WHERE
  LOCATE(col, 'JLMNPQRSTHVWYZ')>
  LOCATE('H', 'JLMNPQRSTHVWYZ')

ここでフィドルを参照してください。

于 2013-02-26T21:33:28.337 に答える
0

できるよ

SELECT ... FROM ... ORDER BY yourletterfield='J' DESC, yourletterfield='L' DESC, yourletterfield='M' DESC, ...

等値演算子は、true の場合は「1」、false の場合は「0」と評価されるため、目的の順序が得られるはずです。

実際にはFIELD()、これを少し冗長にする関数があります。詳細については、この記事を参照してください。

SELECT ... FROM ... ORDER BY FIELD(yourletterfield, 'J', 'L', 'M', ...)
于 2013-02-26T21:28:47.110 に答える