根据查询中定义的值比较两个字符串

时间:2013-02-26 21:26:35

标签: mysql

我必须比较包含字母但不按字母顺序排列的两个字符串字段。

我想按照这个顺序比较它们:

"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查询中实现此目的?

由于

2 个答案:

答案 0 :(得分: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')

请参阅小提琴here

答案 1 :(得分:0)

你可以做到

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

等于运算符将评估为" 1"如果它是真的," 0"如果是假的,那么这应该给你所需的顺序。

实际上有一个FIELD()函数可以使它更简洁一些。有关详细信息,请参阅this article

SELECT ... FROM ... ORDER BY FIELD(yourletterfield, 'J', 'L', 'M', ...)