在 Databricks SQL 中获取字符串模式之后和 ' ' 之前的所有内容

Get everything after a string pattern and before a ' ' in Databricks SQL

我在我的数据库中得到了以下列名称的条目 - properties_desc:

#Thu Sep 03 02:18:11 UTC 2020 cardType=MasterCard cardDebit=true cardUniqueNumber=f0b03da93bc70fbc194a5a4ef5879685

我想trim条目所以我得到:MasterCard

所以基本上,我想要 'cardType=' 之后和 '' 之前的所有内容。

我试过引用这个Get everything after and before certain character in SQL Server 但这适用于特殊字符而不是字符串。

我的尝试:

SUBSTRING(properties_desc, length(SUBSTRING(properties_desc, 0, length(properties_desc) - CHARINDEX ('cardType=', properties_desc))) + 1, 
    length(properties_desc) - length(SUBSTRING(properties_desc, 0, length(properties_desc) - CHARINDEX ('cardType=', properties_desc))) - length(SUBSTRING(
    properties_desc, CHARINDEX (' ', properties_desc), length(properties_desc)))) 

但是上面的查询不起作用。任何帮助表示赞赏。 我该如何解决?

您已将此问题标记为 sql-server 和 databricks。根据您使用 length() 而不是 len(),我假设您使用的是数据块。在这种情况下,您可以使用 regexp_extract() 函数

尝试:“regexp_extract(properties_desc, '(?<=cardType=)[^ ]*')”。

这是未经测试的,因为我不是数据块程序员。

上面的“[^]*”会匹配提取“cardType=”后的一串非space字符。 “(?<=...)”是一种“后视”结构,要求匹配的文本前面有“cardType=”,但结果中不包含该文本。最终结果是正则表达式匹配并提取“cardtype=”之后的所有内容,直到下一个 space(或字符串末尾)。

正则表达式是一个非常强大的字符串匹配工具。如果您还不熟悉它们,那么非常值得学习。 (我希望 SQL 服务器有它们。)