相关疑难解决方法(0)

SQL中是否有"LIKE"和"IN"的组合?

在SQL中(遗憾的是)LIKE由于数据库违反了几乎所有规范化规则,因此经常不得不使用" "条件.我现在无法改变它.但这与这个问题无关.

此外,我经常使用条件,例如WHERE something in (1,1,2,3,5,8,13,21)更好的可读性和SQL语句的灵活性.

在没有编写复杂的子选择的情况下,有没有可能将这两种方法结合起来?

我想要一些简单WHERE something LIKE ('bla%', '%foo%', 'batz%')而不是这样的东西:

WHERE something LIKE 'bla%'
OR something LIKE '%foo%'
OR something LIKE 'batz%'
Run Code Online (Sandbox Code Playgroud)

我在这里使用SQl Server和Oracle,但我很感兴趣,如果在任何RDBMS中都可以这样做.

sql t-sql sql-server oracle plsql

322
推荐指数
13
解决办法
43万
查看次数

将逗号分隔的字符串转换为单独的行

我有一个像这样的SQL表:

| SomeID         | OtherID     | Data
+----------------+-------------+-------------------
| abcdef-.....   | cdef123-... | 18,20,22
| abcdef-.....   | 4554a24-... | 17,19
| 987654-.....   | 12324a2-... | 13,19,20
Run Code Online (Sandbox Code Playgroud)

是否有一个查询,我可以执行查询,如SELECT OtherID, SplitData WHERE SomeID = 'abcdef-.......'返回单个行,如下所示:

| OtherID     | SplitData
+-------------+-------------------
| cdef123-... | 18
| cdef123-... | 20
| cdef123-... | 22
| 4554a24-... | 17
| 4554a24-... | 19
Run Code Online (Sandbox Code Playgroud)

基本上将逗号中的数据拆分成单独的行?

我知道将comma-separated字符串存储到关系数据库听起来很愚蠢,但消费者应用程序中的正常用例使得这非常有用.

我不想在应用程序中进行拆分,因为我需要分页,因此我想在重构整个应用程序之前探索选项.

这是SQL Server 2008(非R2).

t-sql sql-server split comma

215
推荐指数
10
解决办法
41万
查看次数

MySQL和PHP:多关键字搜索

我有一个包含逗号分隔关键字的字符串.例如:

$keywords = 'keyword1, keyword2, keyword3';
Run Code Online (Sandbox Code Playgroud)

我的表模式,命名tbl_address是这样的(简化):

id        INT(11)        PRIMARY KEY, AUTO INCREMENT
address   VARCHAR(250)   NOT NULL
Run Code Online (Sandbox Code Playgroud)

假设我必须MySQLi在PHP(而不是PDO)中使用.

这是我目前的做法:

$result = array();
$keyword_tokens = explode(',', $keywords);
foreach($keyword_tokens as $keyword) {
  $keyword = mysqli_real_escape_string(trim($keyword));
  $sql = "SELECT * FROM tbl_address WHERE address LIKE'%$keyword%'";
  // query and collect the result to $result
  // before inserting to $result, check if the id exists in $result.
  // if yes, skip.
}
return $result;
Run Code Online (Sandbox Code Playgroud)

这种方法有效,但性能效率低下.如果有很多关键字,它会产生很多查询.

我的问题是,有没有更好的方法来实现同一目标?即,使用包含任意关键字的地址返回所有记录的最简单方法是什么?

php mysql

12
推荐指数
2
解决办法
3万
查看次数

如何在SQL中轻松使用多个LIKE条件?

我想在查询中使用很多LIKE条件.我找不到实用的解决方案.我试过CONTAINS,但它不起作用.

而不是使用这个

where EIO.DigiAddress like '%abc@abc.com%'
or EIO.DigiAddress like '%def@def.com%'
or EIO.DigiAddress like '%ghi@ghi.com%'
Run Code Online (Sandbox Code Playgroud)

我想用这样的东西:

CONTAINS(EIO.DigiAddress,'%abc@abc.com%', '%def@def.com%', '%ghi@ghi.com%')
Run Code Online (Sandbox Code Playgroud)

要么

EIO.DigiAddress IN ('%abc@abc.com%', '%def@def.com%', '%ghi@ghi.com%')
Run Code Online (Sandbox Code Playgroud)

sql sql-like

6
推荐指数
2
解决办法
5938
查看次数

标签 统计

sql ×2

sql-server ×2

t-sql ×2

comma ×1

mysql ×1

oracle ×1

php ×1

plsql ×1

split ×1

sql-like ×1