我必须比较两个包含字母但不按字母顺序排列的字符串字段。
我想按照这个顺序比较它们:
"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 查询中实现这一点?
谢谢
我必须比较两个包含字母但不按字母顺序排列的字符串字段。
我想按照这个顺序比较它们:
"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 查询中实现这一点?
谢谢
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')
请在此处查看小提琴。
你可以做
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', ...)