例如:
SELECT COUNT(ID) FROM My_Table
WHERE ID <
(SELECT ID FROM My_Table
WHERE ID LIKE '%4'
ORDER BY ID LIMIT 1)
MY_TABLE:
X ID Y
------------------------
| | A1 | |
------------------------
| | B2 | |
------------------------
| | C3 | |
------------------------ -----Page 1
| | D3 | |
------------------------
| | E3 | |
------------------------
| | F5 | |
------------------------ -----Page 2
| | G5 | |
------------------------
| | F6 | |
------------------------
| | G7 | | -----Page 3
没有数据以4结尾,但仍有5行以小于“%4
”的结尾。
但是,在这种情况下没有匹配,因此SQLite只返回0
我知道它不存在,但是如何更改此行为仍然返回它之前的行数,就好像它在那里?
有什么建议吗?
谢谢。
答案 0 :(得分:1)
SELECT COUNT(ID) FROM My_Table
WHERE ID < (SELECT ID FROM My_Table
WHERE SUBSTRING(ID, 2) >= 4
ORDER BY ID LIMIT 1)
答案 1 :(得分:1)
假设在id
字段的数字部分之前总是有一个字母,您可能需要尝试以下操作:
SELECT COUNT(*) FROM my_table WHERE CAST(substr(id, 2) as int) <= 4;
测试用例:
CREATE TABLE my_table (id char(2));
INSERT INTO my_table VALUES ('A1');
INSERT INTO my_table VALUES ('B2');
INSERT INTO my_table VALUES ('C3');
INSERT INTO my_table VALUES ('D3');
INSERT INTO my_table VALUES ('E3');
INSERT INTO my_table VALUES ('F5');
INSERT INTO my_table VALUES ('G5');
INSERT INTO my_table VALUES ('F6');
INSERT INTO my_table VALUES ('G7');
结果:
5
更新:继续下面的评论,您可能需要考虑使用ltrim()
功能:
ltrim(X,Y)
函数返回通过从Y
左侧删除X
中显示的所有字符而形成的字符串。
示例:
SELECT COUNT(*)
FROM my_table
WHERE CAST(ltrim(id, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') as int) <= 4;
测试用例(添加到上面):
INSERT INTO my_table VALUES ('ABC1');
INSERT INTO my_table VALUES ('ZWY2');
新结果:
7
答案 2 :(得分:1)
在MySQL
中:
SELECT COUNT(ID)
FROM My_Table
WHERE ID <
(
SELECT id
FROM (
SELECT ID
FROM My_Table
WHERE ID LIKE '%4'
ORDER BY
ID
LIMIT 1
) q
UNION ALL
SELECT MAX(id)
FROM mytable
LIMIT 1
)