如何编写基于查找从字符串中提取子字符串的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
.com
或www.bbc.co.uk
有关如何创建美观文本表的提示,请参阅。