【问题标题】:I want to extract a string before and after a specific occurence of a specific character in sql我想在sql中特定字符的特定出现之前和之后提取一个字符串
【发布时间】:2017-12-01 13:03:06
【问题描述】:

我有一列包含这样的数据:

/hey[my]/file/exec[jhwwdfbfjuneinfcvdkvnkdvn]

我想编写一个 sql 查询来仅从该列中获取“文件”。 我想在第 3 次出现 '/' 字符之后和第 2 次出现 '/' 字符之前修剪字符串。文件字符串是动态的,每条记录的文件名都不一样,所以不能用like。

SELECT SUBSTRING(col, LEN(LEFT(col, CHARINDEX ('/', col))) + 1, LEN(col) - LEN(LEFT(col, CHARINDEX ('/', col))) - LEN(RIGHT(col, LEN(col) - CHARINDEX ('/', col))) - 1);

结果 - LINE 1: SELECT SUBSTRING(s.value, LEN(LEFT(s.value, charindex ('/', ... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts.

s.value 的数据类型是文本。 我在 postgresql 数据库中应用这个查询。

我不知道如何给出sql查询中的出现。

【问题讨论】:

  • 请不要使用不适用于您的问题的标签。我删除了数据库标签,因为不清楚您实际使用的是哪一个。请添加only你实际使用的数据库的标签
  • 好!当您这样做时,如果您遇到任何问题,请随时回来询问!
  • 向我们展示数据库架构、示例数据、当前和预期输出。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。
  • 你可以在php中使用explode()
  • 你试过什么?向我们展示您当前的查询尝试。

标签: sql postgresql


【解决方案1】:

您可以做一件事,通过拆分字符串将该字符串拆分为数组,并采用您想要的间隔,我猜这将是第三个间隔。

所以这里是一个简单的例子

SELECt split_part(FirstName, '/', 3)) As firstindex,firstname from Persons_details;

试试这个语法,如果这是你想要的,请告诉我。

【讨论】:

  • 错误:函数 substring_index(text, unknown, integer) 不存在 LINE 1: select trim(substring_index(s.value,'/',3)) as details ,r.ho... ^ 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。
  • 你为什么放未知数?你的专栏名称是什么?
  • 列名是s.value
  • 然后使用like substring_index(columnname, '/', 3)
  • 错误:函数 substring_index(text, unknown, integer) 不存在 LINE 1: select (substring_index(s.value, '/', 3)) as details ,r.host... ^提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-24
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
相关资源
最近更新 更多