Testing String Equality or Relative Ordering

4.4.1 Problem

You want to know whether strings are equal or unequal, or which one appears first in lexical order.

4.4.2 Solution

Use a comparison operator.

4.4.3 Discussion

Strings are subject to the usual equality and inequality comparisons:

mysql> SELECT name, name = 'lead', name != 'lead' FROM metal; +----------+---------------+----------------+ | name | name = 'lead' | name != 'lead' | +----------+---------------+----------------+ | copper | 0 | 1 | | gold | 0 | 1 | | iron | 0 | 1 | | lead | 1 | 0 | | mercury | 0 | 1 | | platinum | 0 | 1 | | silver | 0 | 1 | | tin | 0 | 1 | +----------+---------------+----------------+

You can also use relational operators such as <, <=, >=, and > to test strings for lexical ordering:

mysql> SELECT name, name < 'lead', name > 'lead' FROM metal; +----------+---------------+---------------+ | name | name < 'lead' | name > 'lead' | +----------+---------------+---------------+ | copper | 1 | 0 | | gold | 1 | 0 | | iron | 1 | 0 | | lead | 0 | 0 | | mercury | 0 | 1 | | platinum | 0 | 1 | | silver | 0 | 1 | | tin | 0 | 1 | +----------+---------------+---------------+

To find out whether a string lies within a given range of values (inclusive), you can combine two comparisons:

mysql> SELECT name, 'iron' <= name AND name <= 'platinum' FROM metal; +----------+---------------------------------------+ | name | 'iron' <= name AND name <= 'platinum' | +----------+---------------------------------------+ | copper | 0 | | gold | 0 | | iron | 1 | | lead | 1 | | mercury | 1 | | platinum | 1 | | silver | 0 | | tin | 0 | +----------+---------------------------------------+

You can also use the BETWEEN operator for inclusive-range testing. The following query is equivalent to the one just shown:

SELECT name, name BETWEEN 'iron' AND 'platinum' FROM metal;

4.4.4 See Also

The outcome of a string comparison may be affected by whether or not the operands are binary strings, as discussed in Recipe 4.10.

Категории