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”)(同样,与字母顺序不同)

如何在一个 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, ...

相等运算符将在其为真时评估为“1”,在为假时评估为“0”,因此这应该会给您所需的顺序。

实际上有一个FIELD()函数可以让这变得不那么冗长。有关详细信息,请参阅本文

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