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
如果 table 很大,您可能会发现第二个是最快的,因为您的数据库不必 substring
每个 d_idch
作为逻辑的一部分。权衡...
我只是想知道是否可以编写一个 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
如果 table 很大,您可能会发现第二个是最快的,因为您的数据库不必 substring
每个 d_idch
作为逻辑的一部分。权衡...