如何编写基于查找从字符串中提取子字符串的postgresql函数

如何编写基于查找从字符串中提取子字符串的postgresql函数,postgresql,stored-functions,Postgresql,Stored Functions,我想根据查找表从字符串中提取一个子字符串。 在我的例子中,我有一个名为tld_list的表,它基本上包含一个可能的顶级域条目列表 我对Postgresl函数比较陌生,所以我不知道如何组合如此复杂的逻辑,因为我不知道语法 这是一个用Python编写的等效代码,我想将其转换为psql: def extract\u sld(查询或回答:str,tld\u列表:list)->键入。可选[str]: lowered\u query\u或\u answer=query\u或\u answer.lower()

我想根据查找表从字符串中提取一个子字符串。 在我的例子中,我有一个名为
tld_list
的表,它基本上包含一个可能的顶级域条目列表

我对Postgresl函数比较陌生,所以我不知道如何组合如此复杂的逻辑,因为我不知道语法

这是一个用Python编写的等效代码,我想将其转换为psql:

def extract\u sld(查询或回答:str,tld\u列表:list)->键入。可选[str]:
lowered\u query\u或\u answer=query\u或\u answer.lower()
对于tld_列表中的tld:
如果tld==降低的查询或回答:
#“查询”或“回答”本身就是tld
一无所获
如果使用(“.”+tld)降低查询或回答:
tld_len=len(tld)+1
返回“”
一无所获
因此,基本上我向函数传递一个条目,如
gateway.mydomain.com
,它应该返回第二级域,在本例中为
mydomain.com

我需要采取的步骤:

  • 降低输入字符串
  • 遍历
    tld\u列表
    条目
  • 检查输入字符串是否以tld条目结尾
  • 如果输入字符串等于tld条目,则返回
    NULL
  • 否则,如果输入字符串以tld条目结尾,则提取tld条目后面的子域,例如:
    tld=com
    input=gateway.mydomain.com
    ->
    sld=mydomain.com
  • 否则,如果在输入字符串中找不到单个
    tld
    ,则返回
    NULL
有人能帮我将Python代码转换成与psql等效的代码吗?

请回答您的问题,并添加一些示例数据和基于这些数据的预期输出,作为格式化文本。还请包括一些“边缘案例”的示例数据,例如
.com
www.bbc.co.uk
有关如何创建美观文本表的提示,请参阅。