【问题标题】:SQL: cut a field, then searchSQL:剪切一个字段,然后搜索
【发布时间】:2016-04-07 21:23:48
【问题描述】:

我想在执行 SELECT 语句之前对 sqlite 数据库的字段执行“即时”修改。

该字段名为“topic_simple”,其中包含一些文本。在文中某处,我加入了一种分隔符:4 个空格:" "

这是我典型的 SELECT 语句之一:

SELECT * FROM papers WHERE (topic_simple LIKE '% 3D print%')

我想要这样的东西:

SELECT * FROM papers WHERE ((topic_simple_before_4_spaces) LIKE '% 3D print%')

我不想修改数据库中的topic_simple,我只想对该字段的子字符串进行选择语句。

我该怎么做?

【问题讨论】:

  • 认真建议改进您的存储结构。 this post 虽然提供了一个解决方案(无论是就地分隔符处理或修复它..您将不得不适应(可能使用替换)将多个空格分隔符转换为那些适用于单字符分隔符的解决方案

标签: sql sqlite


【解决方案1】:

LIKE 非常强大。为什么不直接在LIKE 表达式中添加四个空格:

SELECT *
FROM   papers
WHERE  topic_simple LIKE '% 3D print%    %';

请注意,分隔符后面的文本不应包含分隔符,因为这样您可能会得到不需要的行。如果你的 SQLite 支持,你也可以使用正则表达式。

MYSQL 中,您可以直接“选择”(或“提取”)WHERE 子句中四个空格之前的文本:

SELECT *
FROM   papers
WHERE  SUBSTRING(topic_simple, 1, LOCATE('    ', topic_simple) - 1) ...;

【讨论】:

  • sqlite中没有substring函数。虽然有一个 substr 。但是定位呢?
  • 不,抱歉,但您建议的 LIKE 查询不会返回我想要的。我使用了'% 3D print%',它将返回包含例如“3D 打印机”或“3D 打印”的条目。我只想对 4 个空格之前的部分执行类似查询。
  • @Rififi 我忘了一个%。您可以随心所欲地使用您的LIKE,但您需要将四个空格和% 添加到它上面。 (见编辑)
  • 不,在那种情况下它不可能工作。由于它太复杂,而且可能矫枉过正,我只是修改了我的数据库的结构。我添加了一个字段,但可能提高了我的 sql 查询的性能。我应该怎么处理这篇文章?
  • @Rififi 这可能是最好的。好吧,添加空格和% 也可以,至少我在这里测试过。您可以编写自己的答案并接受它。或者接受我的。随便。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
  • 2014-11-07
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
相关资源
最近更新 更多