在 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 服务器有它们。)
我在我的数据库中得到了以下列名称的条目 - 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 服务器有它们。)