You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL使用string_to_array无法按换行符分割字符串求助

PostgreSQL按换行符分割字符串的问题解决

问题根源

你用'\r\n'作为分隔符无效,是因为PostgreSQL的普通单引号字符串不解析反斜杠转义——写在单引号里的\r\n会被当成四个字面字符:\、r、\、n,而不是实际的CRLF换行符。直接用实际换行符有效,是因为你传入的是真实的换行字符,而非转义序列。

正确的解决方式

1. 使用转义字符串(推荐)

在字符串前加E,让PostgreSQL解析反斜杠转义:

SELECT string_to_array('Test1
Test2', E'\r\n');

如果你的CSV数据是Unix风格的LF换行(仅\n),就用E'\n'作为分隔符。

2. 用ASCII码生成换行符

通过chr()函数直接生成对应ASCII码的换行字符:

  • CRLF(Windows换行):chr(13)||chr(10)
  • LF(Unix换行):chr(10)
  • CR(旧Mac换行):chr(13)

示例代码:

-- 处理CRLF换行
SELECT string_to_array('Test1
Test2', chr(13)||chr(10));

-- 处理LF换行
SELECT string_to_array('Test1
Test2', chr(10));

3. 先确认数据中的换行符类型

从CSV导入的数据可能因系统不同使用不同换行符,你可以先查询确认:

-- 取字段最后一个字符的ASCII码,判断换行类型
SELECT ascii(substring(your_column from '.{1}$')) FROM your_table LIMIT 1;
  • 返回10 → LF换行
  • 返回13 → CR换行
  • 如果是CRLF,可检查倒数第二个字符:ascii(substring(your_column from '.{2}$' for 1))

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:45:46