我想得到varchar列上的jaccard相似性有两个列带有varchar(string)我想把下面的列值从apple(varchar)改为[a,p,p,l,e](array)
select column ,split(column,',') as column_array ,split(column, '') as column_array2 from sample_table
select
column
,split(column,',') as column_array
,split(column, '') as column_array2
from sample_table
但没有"“有没有什么函数可以把字符串转换成数组(或列表)?谢谢
wooyq4lh1#
哦,我试着regexp_replace函数如下,它的作品!
array_remove(array_remove(split(regexp_replace(column,'', ','),','), ' '),'')
vm0i2vca2#
如果您使用的数据库支持正则表达式,则可以使用regexp_split_to_array函数将字符串拆分为字符数组。
SELECT column, regexp_split_to_array(column, '') AS column_arrayFROM sample_table;
SELECT
column,
regexp_split_to_array(column, '') AS column_array
FROM
sample_table;
如果不支持正则表达式,则需要使用循环或用户定义函数。
CREATE OR REPLACE FUNCTION string_to_array_of_chars(input_str VARCHAR)RETURNS VARCHAR[] AS $$DECLARE char_array VARCHAR[] := '{}'; i INT;BEGIN FOR i IN 1..LENGTH(input_str) LOOP char_array := array_append(char_array, SUBSTRING(input_str FROM i FOR 1)); END LOOP; RETURN char_array;END;$$ LANGUAGE plpgsql;SELECT column, string_to_array_of_chars(column) AS column_arrayFROM sample_table;
CREATE OR REPLACE FUNCTION string_to_array_of_chars(input_str VARCHAR)
RETURNS VARCHAR[] AS $$
DECLARE
char_array VARCHAR[] := '{}';
i INT;
BEGIN
FOR i IN 1..LENGTH(input_str) LOOP
char_array := array_append(char_array, SUBSTRING(input_str FROM i FOR 1));
END LOOP;
RETURN char_array;
END;
$$ LANGUAGE plpgsql;
string_to_array_of_chars(column) AS column_array
通过使用不需要正则表达式或用户定义函数的解决方法,可以在Presto中实现将VARCHAR列转换为字符数组的目标。下面是如何使用数字表来实现的
将VARCHAR列的字符插入数组。int count(int count);转换为数字值(1),(2),(3),.;
-- Split Characters SELECT st.column, ARRAY_AGG(SUBSTRING(st.column FROM n.num FOR 1)) AS column_array FROM sample_table st CROSS JOIN numbers n WHERE n.num <= LENGTH(st.column) GROUP BY st.column;
-- Split Characters
st.column,
ARRAY_AGG(SUBSTRING(st.column FROM n.num FOR 1)) AS column_array
sample_table st
CROSS JOIN
numbers n
WHERE
n.num <= LENGTH(st.column)
GROUP BY
st.column;
zyfwsgd63#
您可以尝试regexp_extract_all与.模式(匹配任何字符(行终止符除外)):
regexp_extract_all
.
select regexp_extract_all('apple', '.');
输出量:
_col0 ----------------- [a, p, p, l, e]
_col0
-----------------
[a, p, p, l, e]
3条答案
按热度按时间wooyq4lh1#
哦,我试着regexp_replace函数如下,它的作品!
vm0i2vca2#
如果您使用的数据库支持正则表达式,则可以使用regexp_split_to_array函数将字符串拆分为字符数组。
如果不支持正则表达式,则需要使用循环或用户定义函数。
通过使用不需要正则表达式或用户定义函数的解决方法,可以在Presto中实现将VARCHAR列转换为字符数组的目标。下面是如何使用数字表来实现的
将VARCHAR列的字符插入数组。
int count(int count);转换为数字值(1),(2),(3),.;
zyfwsgd63#
您可以尝试
regexp_extract_all
与.
模式(匹配任何字符(行终止符除外)):输出量: