我必须比较包含字母但不按字母顺序排列的两个字符串字段。
我想按照这个顺序比较它们:
"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查询中实现此目的?
由于
答案 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', ...)