【问题标题】:searching record in database having O'NEILL name在具有 O'NEILL 名称的数据库中搜索记录
【发布时间】:2016-09-06 19:14:40
【问题描述】:

我有一个表,其中有一个名为 O'NEILL 的字符串类型的记录,并且在我使用以下查询时使用查询进行搜索:

select * from street_list where str_name='O'NEILL AVE'

我确实收到了以下错误:

12:00:16 [SELECT - 0 行,0.000 秒] [错误代码:933,SQL 状态:42000] ORA-00933:SQL 命令未正确结束

您能否指导我如何在我的数据库中搜索记录。我正在使用 oracle 11 g。

【问题讨论】:

标签: sql oracle


【解决方案1】:

试试

select * from street_list where str_name='O''NEILL AVE'

例如

with street_list as
(select 'O''NEILL AVE' as str_name from dual)
select * from street_list where str_name = 'O''NEILL AVE'

【讨论】:

  • 请检查是否为大写、空白字符。正如你在我的第二个 sql 中看到的,它应该可以工作
  • @user12495 可以肯定的是,您可以尝试:WHERE UPPER(TRIM(str_name)) = 'O''NEILL AVE' 这将避免弗兰克所说的空格和大小写差异。
  • 不,伙计,我没有得到结果 select * from street_list where str_name like 'O''NEILL AVE%' 或 select * from street_list where str_name like 'O''NEILL AVE%'跨度>
【解决方案2】:

我认为您没有完全匹配的数据,因此您可以通过以下方式使用查询:

select * from street_list where str_name like 'O''NEILL AVE%'

【讨论】:

  • 将撇号加倍解决了这个问题。去除 %。问题不在于。
  • 这个查询没有获取结果,为什么? select * from street_list where UPPER(TRIM((STR_NAME || ' ' || STR_TYPE))) like UPPER(TRIM('O``NEILL AVE%'))
【解决方案3】:
select * from street_list where str_name='O''NEILL AVE'

此查询运行良好。正如您在记录字符串类型中所说的那样,名称为 O'NEILL,并且在 Where 条件下您的 Passing O'NEILL AVE。请正确检查。如果记录中的名称字符串是 O'NEILL 并且您传递 O'NEILL AVE 那么您的查询不会获取您需要编写这样的查询的记录

select * from street_list where str_name='O''NEILL'

【讨论】:

  • 这个查询有什么问题? select * from street_list where UPPER(TRIM((STR_NAME || ' ' || STR_TYPE))) = UPPER(TRIM('O``NEILL AVE'))
  • 请说明您使用的是哪个数据库,如 Sql、Oracle 等。
【解决方案4】:

使用转义引号。

这是另一个需要澄清的例子:

select '''Today is '' '|| sysdate from dual 'Today is ' 06/09/16

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 2017-03-24
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多