按数字列的第一个数字排序

时间:2013-12-16 13:20:21

标签: sql oracle

我有一张桌子:

CREATE TABLE client_details(
   ...
   clientid number(10,0) ,
   name varchar2,
   ...
)

clientid可以是某个唯一编号(来自其他来源的外部ID)。

我需要按clientd实施过滤,因此系统会显示clientid 用户输入值

开头的所有记录

例如:

让表格包含以下数据:

[{clientId=119, name='Bob'},
 {clientId=11234,name='Anna'},
 {clientId=2,name='Eva'}]

当用户输入“11”作为搜索查询时,系统将显示:

[{clientId=119, name='Bob'},
 {clientId=11234,name='Anna'}]

当用户输入“2”作为搜索查询时,系统将显示:

 [{clientId=2, name='Eva'}]

用户可以输入0到999999999之间的任何数字作为查询。

我的初衷是使用

之类的东西
SELECT * 
FROM client_details
WHERE SUBSTR(client, 0, length_of_query) = 'query'

(其中query表示用户输入,length_of_query表示查询长度为字符串)

我有点不喜欢substr并将int转换为其中的字符串,s.a。桌子可能很大。另一方面,我宁愿不改变数据库结构。

也许某人有更好的主意?

2 个答案:

答案 0 :(得分:3)

转换为字符串并使用like运算符:

SELECT *
FROM client_details
WHERE TO_CHAR(clientId) LIKE <<query>> || '%'

client_details(TO_CHAR(clientId))上创建索引,当用户输入多个数字时,您也会获得出色的效果。

答案 1 :(得分:1)

使用(CAST或CONVERT)执行转换 并使用 LIKE 运算符,但请先阅读these Tutorial改变数据类型。

SELECT *  
FROM [Clients_details]  
WHERE CAST(clientId AS Varchar(50)) LIKE 'query%';