我有一张桌子:
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。桌子可能很大。另一方面,我宁愿不改变数据库结构。
也许某人有更好的主意?
答案 0 :(得分:3)
转换为字符串并使用like
运算符:
SELECT *
FROM client_details
WHERE TO_CHAR(clientId) LIKE <<query>> || '%'
在client_details(TO_CHAR(clientId))
上创建索引,当用户输入多个数字时,您也会获得出色的效果。
答案 1 :(得分:1)