【问题标题】:Selecting rows where cells contain multiple values选择单元格包含多个值的行
【发布时间】:2018-05-23 22:49:28
【问题描述】:

使用 Oracle SQL Developer 1.5.5。

我有一个数据表,我正在尝试从表 (TABLENAME) 中选择行,其中表中的列 (COLUMN5) 包含多个值。例如使用以下命令:

select * from TABLENAME where COLUMN5=''101','221','429''

我这样做是因为我想选择表格中第 5 列中的单元格值为 '101','221',229' 的所有行

另一个复杂之处在于,表中的每个值都包含在单引号内,并用逗号分隔。运行上述命令时,我收到一条错误消息,上面写着“SQL 命令未正确结束”我认为这与单引号和多个值有关,因为当我运行以下命令以选择行时,第 5 列是 ' 443',我得到一个结果:

select * from TABLENAME where COLUMN5='''443'''

请注意,“443”的这些值在表中用单引号括起来。

我的问题是什么命令可以让我在第 5 列中选择具有多个值的行?救命!

如果您需要任何说明,请告诉我

【问题讨论】:

  • 只是为了确认一下,您在一个字段中存储了多个值?你能分享一些样本数据和你想要的结果吗?
  • 一个带引号的字符串看起来像'this is one quote mark '' in the middle of a string' (字符串中的两个连续单引号转换为一个单引号,而不是结束一个字符串并开始一个新的。) 你的第一个值应该是'''101'',''221'',''429'''
  • 请升级您的 sqldev 1.5.5 于 2009 年 7 月发布。9 年前。 Windows Vista 是最新的。
  • 例如,第 5 列包含如下单元格: Column 5 '443' '443' '101','221','429' '101','221','429' '101 ','221','429' '25' '-1' 等等......我要做的就是选择那些在第 5 列中包含单元格 '101','221','429' 的行跨度>
  • 谢谢,我最终想要做的是能够使用更新功能来更新上述字段。例如,使用我上面的示例,第 5 列中有许多单元格包含以下值:'101'、'221'、'429' 我想从每个单元格中删除 '101' - 我该怎么做那个?

标签: sql oracle-sqldeveloper


【解决方案1】:

我认为你可以像下面这样使用 FIND_IN_SET:

select * from accounts where FIND_IN_SET('101','101,102') 
FIND_IN_SET ignore the single quotes

【讨论】:

  • 虽然这段代码可以回答问题,但最好解释一下如何解决问题,并提供代码作为示例或参考。仅代码的答案可能会令人困惑且缺乏上下文。
  • FIND_IN_SET 是 MySQL 函数,在 Oracle 中不可用。您的意思是使用 INSTR 还是 REGEX? stackoverflow.com/questions/28942608/…
【解决方案2】:

你只需要转义引号

create table so_col5 (a integer, col5 varchar2(25));
insert into so_col5 values (1, 'abcd');
insert into so_col5 values (2, 'abcd');
insert into so_col5 values (3, 'abcd');
Insert into SO_COL5 (A,COL5) values (4,'''101'',''221'',''229''');

commit;

select * from so_col5 where col5 = '''101'',''221'',''229''';

我尝试了几次,测试从 dual 中选择字符串,但后来我记得我可以作弊 - 并将结果从 GRID 导出为 INSERT 脚本,然后复制/粘贴该值的引用字符串并使用它在我的 SELECT 中。

您使用的是 ANCIENT 的 v1.5。强烈建议您升级以获得最佳体验。

您还可以使用 Q 函数 (docs),您可以传递一个字符串,Oracle 会为您处理引号转义。这是a scenario you can play with on LiveSQL

【讨论】:

    猜你喜欢
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多