在 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 个字符的列,因此需要应用其他逻辑。