Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 类似甲骨文的';124%的字符串不工作_Sql_Oracle - Fatal编程技术网

Sql 类似甲骨文的';124%的字符串不工作

Sql 类似甲骨文的';124%的字符串不工作,sql,oracle,Sql,Oracle,如何在col中查找数据,如我的需求是col1 isclob列值,如:- 12.5.4 12.4 12.5 12.4.1 12.5 12.6 12.5 12.5 12.4 我需要在开始、中间和结束中查找12.4的数据,如果我运行此查询以获得12.4的中间数据,它将不起作用 SELECT * FROM TABLE WHERE COL1 LIKE ' %12.4 ' 我的列是CLOBcolumn需要在CLOB列中查找以空格分隔的数据 范例 12.4 12.5 12.4.1 12.5 12.4

如何在
col
中查找数据,如我的需求是col1 is
clob
列值,如:-

12.5.4 12.4 12.5 12.4.1 12.5 12.6 12.5 12.5 12.4
我需要在开始、中间和结束中查找12.4的数据,如果我运行此查询以获得12.4的中间数据,它将不起作用

SELECT * FROM TABLE WHERE COL1 LIKE ' %12.4 '
我的列是
CLOB
column需要在
CLOB
列中查找以空格分隔的数据

范例

12.4 12.5 12.4.1 

12.5 12.4 12.5

12.4.1 12.4.5 

12.5.1 12.4 12.4.1
我把数据放在
CLOB
列中,用空格分隔 12.4可能在数据的第一个值或中间或数据的末尾

first row  12.4 12.5 12.6.1
second row 13.5 12.4 12.6.2
third row  12.5 14.5.1 12.4
fourth row 12.4.1 12.6 12.7

我需要前3行,而不是第4行,因为它有12.4.1

与double
%
一起使用:

SELECT * FROM myTABLE WHERE COL1 LIKE '%12.4%';
这次不管你的文字在哪里

此外,通过使用绑定变量,可以为不同的值设置参数:

SELECT * FROM myTABLE WHERE COL1 LIKE '%'||'&x'||'%' -- x := 12.4 or a value else.

改为与double
%
一起使用:

SELECT * FROM myTABLE WHERE COL1 LIKE '%12.4%';
这次不管你的文字在哪里

此外,通过使用绑定变量,可以为不同的值设置参数:

SELECT * FROM myTABLE WHERE COL1 LIKE '%'||'&x'||'%' -- x := 12.4 or a value else.
我需要找到12.4开头、中间和结尾的数据

从您的问题中不清楚您是否要匹配任何包含12.4(如12.4.1)的项,还是只匹配正好是12.4的项。我想你想要的是完全匹配的

<>在中间搜索值最简单的方法是<代码>类似“% 12.4%”< /代码>。但是,如果12.4位于列值的开头或结尾,则这将不匹配,因为在该值之前/之后不会有匹配的空格

解决这个问题的一个技巧是在列值的开头和结尾连接空格:
其中的“| | COL1 | |”类似于“%12.4%”

另一种方法是明确地涵盖所有可能性:
WHERE(类似于“12.4%”的COL1或类似于“%12.4%”的COL1或类似于“%12.4%”的COL1)

我需要找到12.4开头、中间和结尾的数据

从您的问题中不清楚您是否要匹配任何包含12.4(如12.4.1)的项,还是只匹配正好是12.4的项。我想你想要的是完全匹配的

<>在中间搜索值最简单的方法是<代码>类似“% 12.4%”< /代码>。但是,如果12.4位于列值的开头或结尾,则这将不匹配,因为在该值之前/之后不会有匹配的空格

解决这个问题的一个技巧是在列值的开头和结尾连接空格:
其中的“| | COL1 | |”类似于“%12.4%”


另一种方法是明确地涵盖所有可能性:
WHERE(COL1类似于'12.4%'或COL1类似于'%12.4'或COL1类似于'%12.4%')
我怀疑您只想在单词边界(开头、中间和结尾作为单独的文字)匹配12.4,因此,请使用下面的
REGEXP
模式

SELECT * FROM TABLE WHERE 
REGEXP_LIKE(COL1 ,'(^|\s)12.4($|\s)');

我怀疑您只想在单词边界(开头、中间和结尾作为单独的文字)匹配12.4,因此,请使用下面的
REGEXP
模式

SELECT * FROM TABLE WHERE 
REGEXP_LIKE(COL1 ,'(^|\s)12.4($|\s)');

当我在sql fiddle中测试时,这是有效的

   select *
    from table1
    where instr(replace(col1,' ','|'), '12.4|') > 0
    or    instr(replace(col1,' ','|'),'|12.4|') > 0
    or    instr(replace(col1,' ','|'),'|12.4') > 0;
编辑:前面的答案在sqlfiddle中有效,但不适用于Reena。我在上面添加了另一个答案,它使用instr(在本列中查找此字符串)。返回搜索字符串在给定列中的位置

Replace space with pipe then do a regular like query.
    select *
    from table1
    where replace(col1,' ','|') like '12.4|%'
    or replace(col1,' ','|') like '%|12.4|%'
    or replace(col1,' ','|') like '%|12.4';

当我在SQLFiddle中测试时,这是有效的

   select *
    from table1
    where instr(replace(col1,' ','|'), '12.4|') > 0
    or    instr(replace(col1,' ','|'),'|12.4|') > 0
    or    instr(replace(col1,' ','|'),'|12.4') > 0;
编辑:前面的答案在sqlfiddle中有效,但不适用于Reena。我在上面添加了另一个答案,它使用instr(在本列中查找此字符串)。返回搜索字符串在给定列中的位置

Replace space with pipe then do a regular like query.
    select *
    from table1
    where replace(col1,' ','|') like '12.4|%'
    or replace(col1,' ','|') like '%|12.4|%'
    or replace(col1,' ','|') like '%|12.4';

您的解释、要求和数据仍然不清楚。但也许这个非常简单的解决方案会帮助你,至少作为一个想法。请看我的示例中的第6行。在这种情况下,您的要求是什么?Kaushik-Nayak查询也可以工作

WITH test_data AS
(
SELECT 1 rn, '12.4 12.5 12.6.1' str FROM dual
UNION ALL
SELECT 2,    '13.5 12.4 12.6.2' FROM dual
UNION ALL
SELECT 3,   '12.5 14.5.1 12.4' FROM dual
UNION ALL
SELECT 4,   '12.4.1 12.6 12.7' FROM dual
UNION ALL
SELECT 5,   '12.4.1 12.4.6 12.4.7' FROM dual
UNION ALL
SELECT 6,   '12.4 12.4.1 12.4' FROM dual
)
SELECT rn, str FROM test_data
 WHERE str Like '%12.4%'
MINUS
SELECT rn, str FROM test_data
 WHERE str Like '%12.4.%'
ORDER BY 1
/
输出:

12.4 12.5 12.6.1
13.5 12.4 12.6.2
12.5 14.5.1 12.4 

您的解释、要求和数据仍然不清楚。但也许这个非常简单的解决方案会帮助你,至少作为一个想法。请看我的示例中的第6行。在这种情况下,您的要求是什么?Kaushik-Nayak查询也可以工作

WITH test_data AS
(
SELECT 1 rn, '12.4 12.5 12.6.1' str FROM dual
UNION ALL
SELECT 2,    '13.5 12.4 12.6.2' FROM dual
UNION ALL
SELECT 3,   '12.5 14.5.1 12.4' FROM dual
UNION ALL
SELECT 4,   '12.4.1 12.6 12.7' FROM dual
UNION ALL
SELECT 5,   '12.4.1 12.4.6 12.4.7' FROM dual
UNION ALL
SELECT 6,   '12.4 12.4.1 12.4' FROM dual
)
SELECT rn, str FROM test_data
 WHERE str Like '%12.4%'
MINUS
SELECT rn, str FROM test_data
 WHERE str Like '%12.4.%'
ORDER BY 1
/
输出:

12.4 12.5 12.6.1
13.5 12.4 12.6.2
12.5 14.5.1 12.4 

事情还不清楚。所以,您希望“在12.4开头、中间和结尾处查找数据”。那么这是否意味着你想检查是否有三个12.4秒,一个在开头,一个在中间,一个在结尾。此外,它是否应该仅为12.4?其他如12.4.1不应匹配?显示更多的样本行以及预期输出的所有变化。仅12,4示例12,6.1 12,4.1 12.4 12,4,2第二行12.4 14.5。12.4.5从该数据中,我应得到2行12,4,不添加对样本数据的注释。编辑您的问题并显示几行的预期o/p。现在,为什么在您的示例中有逗号?请修复您的数据结构,这样您就不会在单个字符串中存储一组数值!事情还不清楚。所以,您希望“在12.4开头、中间和结尾处查找数据”。那么这是否意味着你想检查是否有三个12.4秒,一个在开头,一个在中间,一个在结尾。此外,它是否应该仅为12.4?其他如12.4.1不应匹配?显示更多的样本行以及预期输出的所有变化。仅12,4示例12,6.1 12,4.1 12.4 12,4,2第二行12.4 14.5。12.4.5从该数据中,我应得到2行12,4,不添加对样本数据的注释。编辑您的问题并显示几行的预期o/p。现在,为什么在您的示例中有逗号?请修复您的数据结构,这样您就不会在单个字符串中存储一组数值!我需要在我的clob专栏中找到确切的12,4问题是12.4的空间它不起作用如何找到空间,然后是12,4,然后是空间我的clob值中不需要12.4.1这12.4在第一个或中间像13.5 12,4 15.6
12,4
12.4
?戴夫的答案看起来应该行得通。如果不符合您的需要,请详细解释问题。倾向于沮丧-停止说话,开始倾听。你读了戴夫的建议了吗?执行此操作的标准方法是条件
“”|