在 PostgreSQL 中使用滑动 window 打破列中的字符串
Breaking strings in a column by using a sliding window in PostgreSQL
如何在 PostgreSQL 中使用滑动 window 拆分下列中的每个字符串。
输入
Column
TTTTACAATATAGCCAC
TTTGAAGAAAACATGCA
TTTCATACGGCTAGCGG
TTTAGTCTGTATGCTTG
对于第一个字符串,预期输出如下(滑动 window = 9)。我期望列的每个字符串都有这样的输出。
输出
TTTTACAAT
TTTACAATA
TTACAATAT
TACAATATA
ACAATATAG
CAATATAGC
AATATAGCC
ATATAGCCA
TATAGCCAC
谢谢
generate_series
函数是你的朋友。
https://www.postgresql.org/docs/current/functions-srf.html
首先你需要这样拆分你的字符串
WITH split AS(
SELECT generate_series(1, length('TTTTACAATATAGCCAC') - 8) AS start
)
SELECT substring('TTTTACAATATAGCCAC', split.start, 9)
FROM split;
然后,假设您是从 table 获取它的,您的查询将是这样的。
WITH split AS(
SELECT
your_table_column as text,
generate_series(1, length(your_table_column) - 8) AS start
FROM your_table_name
)
SELECT substring(text, split.start, 9)
FROM split;
这不会显示任何少于 9 个字符的列,因此需要应用其他逻辑。
如何在 PostgreSQL 中使用滑动 window 拆分下列中的每个字符串。
输入
Column
TTTTACAATATAGCCAC
TTTGAAGAAAACATGCA
TTTCATACGGCTAGCGG
TTTAGTCTGTATGCTTG
对于第一个字符串,预期输出如下(滑动 window = 9)。我期望列的每个字符串都有这样的输出。
输出
TTTTACAAT
TTTACAATA
TTACAATAT
TACAATATA
ACAATATAG
CAATATAGC
AATATAGCC
ATATAGCCA
TATAGCCAC
谢谢
generate_series
函数是你的朋友。
https://www.postgresql.org/docs/current/functions-srf.html
首先你需要这样拆分你的字符串
WITH split AS(
SELECT generate_series(1, length('TTTTACAATATAGCCAC') - 8) AS start
)
SELECT substring('TTTTACAATATAGCCAC', split.start, 9)
FROM split;
然后,假设您是从 table 获取它的,您的查询将是这样的。
WITH split AS(
SELECT
your_table_column as text,
generate_series(1, length(your_table_column) - 8) AS start
FROM your_table_name
)
SELECT substring(text, split.start, 9)
FROM split;
这不会显示任何少于 9 个字符的列,因此需要应用其他逻辑。