我有SQL:
select name, city, age
from Student where (name, city)
in (('Tom1','CiTy1'),('Tom2','CiTy2'),...,('TomN','CiTyN'))
SQL保证顺序的结果?
例如:
Name ----- City ----- Age
Tom1 | CiTy1 | 10
Tom2 | CiTy1 | 17
Tom3 | CiTy1 | 15
..............
TomN | CiTyN | 09
答案 0 :(得分:1)
您不能简单地使用以下排序,因为文本编号无法正确排序(最有可能):
ORDER BY city, name
但我们可以删除文本组件,转换为int,然后排序:
SELECT
name, city, age
FROM Student
WHERE (name, city) In (('Tom1','CiTy1'), ('Tom2','CiTy2'),...,('TomN','CiTyN'))
ORDER BY
CAST(REPLACE(city, 'CiTy') AS INT),
CAST(REPLACE(name, 'Tom') AS INT)
答案 1 :(得分:1)
正如其他人所说,您需要添加order by子句以保证订购。
如果您希望您的in子句确定顺序,您可以执行以下操作:
List of 8
$ list1.a : num 1
$ list1.b : num 2
$ list1.blist.a: num 3
$ list1.blist.b: num 4
$ list2.a : num 1
$ list2.b : num 2
$ list2.blist.a: num 3
$ list2.blist.b: num 4
答案 2 :(得分:0)
获取排序结果的唯一方式是使用ORDER BY
。
您可以使用正则表达式删除任何非数字字符,将该字符串转换为数字,然后按该数字排序:
select name, city, age
from student
where ..
order by to_number(regexp_replace(name, '[^0-9]', '')),
to_number(regexp_replace(city, '[^0-9]', ''))