我需要执行一个SQL查询,它将String列转换为Array,然后验证该数组的大小
我可以使用postgresql轻松完成:例如
select
cardinality(string_to_array('a$b','$')),
cardinality(string_to_array('a$b$','$')),
cardinality(string_to_array('a$b$$$$$','$')),
但由于某些原因尝试将Vertica上的String转换为数组并不那么简单,请看这个链接:
https://www.vertica.com/blog/vertica-quick-tip-dynamically-split-string/ https://forum.vertica.com/discussion/239031/how-to-create-an-array-in-vertica
还有更多他们没有帮助。
我也试过用:
select REGEXP_COUNT('a$b$$$$$','$')
但是我的价值不正确 - 1。
如何将字符串转换为Vertica上的数组并获取其长度?
$
在正则表达式中具有特殊含义。它代表字符串的结尾。
尝试逃避它:
select REGEXP_COUNT('a$b$$$$$', '[$]')
您可以使用Java,C ++,R或Python创建UDx标量函数(UDSF)。输入将是一个字符串,输出将是一个整数。 https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/ExtendingVertica/UDx/ScalarFunctions/ScalarFunctions.htm
这将允许您在传入的字符串上使用特定于语言的数组逻辑。例如,在python中,您可以包含以下逻辑:
input_list = input.split("$")
filtered_input_list = list(filter(None, input_list))
list_count = len(filtered_input_list)
这些示例是为Vertica编写UDx的良好起点。 https://github.com/vertica/UDx-Examples
我无法转换为数组 - 但我能够得到值的长度我做的是转换为行使用计数 - 它不是最好的性能明智但是用这种方式我能够做像过滤一样的操作分隔符之间的每个值 - 我不需要使用[]作为$等字符
select (select count(1)
from (select StringTokenizerDelim('a$b$c','$') over ()) t)
返回3