我将搜索条件放在"IN"((的位置,并希望它按顺序显示,因为它是oracle中的"IN"。
'IN'(( 中的数据是LOGIN_ID字段的数据,它是唯一的,由字符串类型组成。
因此,例如,查询将如下所示,
select login_id from table where login_id in ('1234', 'abcd', '12cd')';
结果必须像这样显示,
=======
login_id
=======
'1234'
'abcd'
'12cd'
错误结果的例子是这样的,
=======
login_id
=======
'abcd'
'12cd'
'1234'
提前感谢!
没有特定的 Oracle 功能。
您可以使用case
表达式:
select login_id
from table
where login_id in ('1234', 'abcd', '12cd')
order by case login_id
when '1234' then 1
when 'abcd' then 2
when '12cd' then 3
end
decode()
可以稍微缩短语法:
order by decode(login_id, '1234', 1, 'abcd', 2, '12cd', 3)
不能保留 IN 列表的顺序,但可以将非常相似的语法与内置集合和TABLE
运算符一起使用,将值转换为行,然后按行排序。下面的查询很奇怪,但它避免了将值表达式列表更改为大型CASE
语句或其他内容。
select some_table.login_id
from some_table
join
(
select column_value login_id, rownum order_number
from table(sys.odcivarchar2list('1234', 'abcd', '12cd'))
) in_list
on some_table.login_id = in_list.login_id
order by order_number;