Oracle SQL,我如何使用像这样的运算符=>像'%列名%'

fjnneemd  于 2023-11-17  发布在  Oracle
关注(0)|答案(2)|浏览(130)

我想用特定的模式搜索特定的数据,但我想把它作为一个用户输入函数,搜索我输入的模式。

with user_input as(
select 'user input' usr_ip
from dual
)

select
*
from table
where column like '%usr_ip%'

字符串
我想获取列容器usr_ip的结果数据集

pinkon5k

pinkon5k1#

您不需要子查询因子分解子句(也称为CTE),并且可以将查询简化为:

SELECT *
FROM   table_name
WHERE  column_name LIKE '%user input%'

字符串
如果您有一个预处理器,允许您通过函数输入用户输入(因为Oracle数据库中本机不存在此类函数),则:

SELECT *
FROM   table_name
WHERE  column_name LIKE '%' || your_user_input_function() || '%'


如果你确实需要子查询的factoring子句,那么你需要将它JOIN到查询中:

WITH user_input (usr_ip) AS (
  SELECT 'user input' FROM DUAL
)
SELECT t.*
FROM   table_name t
       INNER JOIN user_input u
       ON t.column_name LIKE '%' || u.usr_ip || '%';


或者使用子查询:

WITH user_input (usr_ip) AS (
  SELECT 'user input' FROM DUAL
)
SELECT *
FROM   table_name
WHERE  column_name LIKE '%' || (SELECT usr_ip FROM user_input) || '%';


fiddle

gg58donl

gg58donl2#

一般来说,以下几种方法都可以...

with user_input as( select 'user input' usr_ip from dual )
select * from someTable, user_input where someColumn like '%'||user_input.usr_ip||'%'

字符串
但是如果你的真实的问题是如何让用户输入到一个SQL语句中,那么,这不是SQL要做的事情。没有SQL语句或函数直接从用户那里获取数据。可以在调用程序中使用主机变量或动态SQL等机制来向数据库提供用户输入。

相关问题