【问题标题】:SQL IN query for approximate valuesSQL IN 查询近似值
【发布时间】:2016-10-11 03:37:03
【问题描述】:

我正在尝试使用 SQL IN 函数从表中检索信息。 我正在使用以下select,我的逻辑是搜索包含缩写“SMS”的字段。但是,该查询仅检索“其他服务”的值

如何只查询字段中的一部分值?

这是我正在使用的选择功能:

select product_id ,product_name
from product 
where product_name 
IN ('Other Services','%SMS%')

我正在使用 PL/SQL Developer。目前我只对适用于此 DBMS 的解决方案感兴趣。

【问题讨论】:

  • 哪个 DBMS?您需要一个适用于所有这些的解决方案吗?

标签: mysql sql sql-server oracle oracle-sqldeveloper


【解决方案1】:

试试:

SELECT product_id,
       product_name
FROM   product
WHERE  product_name = 'Other Services'
   OR  product_name LIKE '%SMS%';

请注意,某些数据库服务器对 LIKE 运算符是区分大小写的。

【讨论】:

  • 以防万一您不使用不区分大小写的排序规则 > dev.mysql.com/doc/refman/5.7/en/case-sensitivity.html 这应该可以解决问题 ...OR product_name COLLATE UTF8_GENERAL_CI LIKE '%SMS%'
  • 也可以使用:WHERE CHARINDEX('sms', product_name) > 0
  • 感谢您的回复。
【解决方案2】:

通配符“LIKE”不能用于“IN”运算符。你使用它的方式。

要获得预期的输出,您可以使用类似的东西。

选择产品 ID, 产品名称 来自产品 WHERE product_name = '其他服务' 或 product_name LIKE '%SMS%'

选择产品 ID, 产品名称 来自产品 WHERE product_name = '其他服务' 联合

选择产品 ID, 产品名称 来自产品 WHERE product_name LIKE '%SMS%'

【讨论】:

  • 我认为我只能在“IN”运算符中使用确切的值和完整的短语?
【解决方案3】:

IN 运算符不接受带有通配符的值。而是使用LIKE 运算符。

select product_id ,product_name
from product 
where product_name='Other Services' 
OR product_name LIKE '%SMS%'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 2021-03-04
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    相关资源
    最近更新 更多