Sql 获取“/”字符后的字符串
我想在PostgreSQL SELECT查询中提取字符“/”后面的字符串 字段名为source\u path,表名为movies\u history 数据示例: 源路径的值: 184738/file1.mov 194839/file2.mov 183940/file3.mxf 118942/file4.mp4 等等。源路径的所有值均采用此格式 随机编号/filename.xxx 我只需要获取'file.xxx'字符串。您需要使用函数 说明:Sql 获取“/”字符后的字符串,sql,regex,postgresql,pattern-matching,Sql,Regex,Postgresql,Pattern Matching,我想在PostgreSQL SELECT查询中提取字符“/”后面的字符串 字段名为source\u path,表名为movies\u history 数据示例: 源路径的值: 184738/file1.mov 194839/file2.mov 183940/file3.mxf 118942/file4.mp4 等等。源路径的所有值均采用此格式 随机编号/filename.xxx 我只需要获取'file.xxx'字符串。您需要使用函数 说明: %/ 这意味着%的文本和/ 每个都是最后一部分中定义
%/
这意味着%的文本和/
每个都是最后一部分中定义的占位符,用于和需要以及传统
所以您有%和函数将返回在这两个占位符中找到的内容。在本例中是%或后面字符串的其余部分/
最后查询:
如果您的案例如此简单,请在字符串中使用/ 如果可以有多个/,并且您希望字符串位于最后一个之后,一个简单而快速的解决方案是使用向后处理字符串,取第一部分,然后第二次反转:
SELECT reverse(split_part(reverse(source_path), '/', 1)) ...
或者您可以使用更通用、更昂贵的正则表达式:
SELECT substring(source_path, '[^/]*$') ...
说明:
%/
[…]。。包含字符列表以形成字符类。
[^...] .. 如果列表以“^”开头,则列表中所有不在列表中的字符都将反转。
* .. 0-n次的量词。
$ .. 锚定在绳子的末端
小提琴
Old这听起来像是使用正则表达式的理由!您是在获取数据后处理数据,还是只希望从数据库返回filename.mov?在获取数据后,这样做更容易,但我认为仍然可以在SQL中执行。获取数据后,我将处理数据。当数据返回时,您将如何处理它?PHP?如果是这样,您可以使用的组合来查找最后一个“/”,然后仅获取文件名。一个示例很难充分描述字符串的外观。要得到一个有用的查询,您需要更加具体。@Erwin,我添加了更多的示例,以防其他人有类似的问题。谢谢没问题,我包含了最后一个查询。我不想太粗鲁,但是如果你不能理解最后一步,你可能需要先学习sql初学者课程。谢谢,我在发布后得到了它。是否可以将返回的子字符串值存储到变量中?很抱歉,我是一个彻头彻尾的noob,但我正在学习SQL,希望了解更多。这取决于上下文和用例。这可能有帮助:。否则,请问一个新问题,评论不是地方。嗨,欧文。我回来是因为我得到了一票。您的第一个解决方案很好,因为我认为只有一个/on-OP需求。但是当我尝试第二个解决方案时,在第一个解决方案之后使用multiple/返回所有内容/。。。而不是最后一个后面的文本/不确定这是否是目的。您可以在这里检查差异@JuanCarlosOropeza:谢谢你指出。上一个第二个解决方案不适用于字符串中的多个/。我用一个实际可行的解决方案取代了它。更新小提琴:
SELECT split_part(source_path, '/', 2) ...
SELECT reverse(split_part(reverse(source_path), '/', 1)) ...
SELECT substring(source_path, '[^/]*$') ...