SQL 字母顺序 Select 语句

SQL Alphabetical Select Statement

我只是想知道是否可以编写一个 SQL 语句,该语句可以 select 行按列包含以字母表中较晚出现的字母开头的字符

说我有 table

CREATE TABLE data (
    d_idno SERIAL PRIMARY KEY,
    d_idch CHAR(3) NOT NULL,
    d_desc CHAR(25) NOT NULL
);

其中包含以下数据

INSERT INTO data (d_idch, d_desc)
VALUES('BLK', 'black item'),
      ('PNK', 'pink item'),
      ('GRN', 'green item'),
      ('BLU', 'blue item'),
      ('CYA', 'cyan item');

我想按照

行执行 SQL 语句
SELECT * FROM data
WHERE d_idch > 'BL'    # I'd like to find a way to replace this line
ORDER BY d_idch

这当然是错误的,但我想 select 按字母顺序排列时 'BL' 包含字符 'BL' 的行之后的每一行

您可以在 WHERE 子句中添加另一个条件以将 BL 结果排除在外:

SELECT * FROM data
WHERE 
  d_idch > 'BL' 
  AND SUBSTRING(d_idch FROM 1 FOR 2) <> 'BL'
ORDER BY d_idch

通过这种方式,您可以获得大于 BL 的所有内容,但不会获得任何以 BL

开头的内容

作为替代方案,您可以在 BL:

的末尾添加 ZZZZZZ
SELECT * 
FROM data
WHERE d_idch > 'BLZZZZ'  
ORDER BY d_idch

还有另一种选择,我认为它可能更接近您正在寻找的东西(尽管所有结果都相同):

SELECT * 
FROM data
WHERE 
  SUBSTRING(d_idch FROM 1 FOR 2) > 'BL'  
ORDER BY d_idch

SQL Fiddle here

如果 table 很大,您可能会发现第二个是最快的,因为您的数据库不必 substring 每个 d_idch 作为逻辑的一部分。权衡...