Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用postgresql在大文本中查找字符串_Postgresql - Fatal编程技术网

使用postgresql在大文本中查找字符串

使用postgresql在大文本中查找字符串,postgresql,Postgresql,我在PostgreSQL表中有一个名为data的列,其中包含以下内容: -----BEGIN HEADER----- TYPE = PKCS#10 SERIAL = xxxxx NOTBEFORE = Thu Sep 9 12:37:43 2010 UTC LOA = 10 ROLE = xxxxx RA = xxxxx REQUEST_AUTH_USERID = CN=xxxxxxx SCEP_TID = xxxxx ARCHIVED_AFTER = Mon Nov 30 17:41:40

我在PostgreSQL表中有一个名为
data
的列,其中包含以下内容:

-----BEGIN HEADER-----
TYPE = PKCS#10
SERIAL = xxxxx
NOTBEFORE = Thu Sep  9 12:37:43 2010 UTC
LOA = 10
ROLE = xxxxx
RA = xxxxx
REQUEST_AUTH_USERID = CN=xxxxxxx
SCEP_TID = xxxxx
ARCHIVED_AFTER = Mon Nov 30 17:41:40 2015
_AFTER = Tue Jan 26 09:26:14 2016
-----END HEADER-----
-----BEGIN CERTIFICATE REQUEST-----
MIICWTCCAUECAQAwFjEUMBIGA1UEAwwLQ09QUzAwMDEzMDAwggEiMA0GCSqGSIb3
.
.
.
.
bV0eG4rlMOgTPv6mqb9HHKFqi3dsDzZKfXyoAsLOyOkj+AWXmAfXG8enT4uqBJJf
AsrUuJyTwzvmfdcEgYxokI6FU/nAjgQpmLkuVrE=
-----END CERTIFICATE REQUEST-----
由于我们想转移到另一个应用程序,我只需要以
----begincertificaterequest-----
开头的部分

我尝试在SQL查询中使用子字符串和位置提取此字符串,但即使我尝试使用以下内容查找此字符串的位置:

SELECT position('-----BEGIN CERTIFICATE REQUEST-----' in (SELECT data from openca2.request where req_key = 3874))
我得到一个空值。我只能找到提取单个字符串的一部分的示例

我不知道空间是否有问题。开始标题和结束标题中的部分并不总是相同的

这可以通过SQL查询完成吗?

如何:

SELECT substr(
          data,
          position('-----BEGIN CERTIFICATE REQUEST-----' IN data)
       )
FROM openca2.request
WHERE req_key = 3874;
SELECT split_part(data, '-----BEGIN CERTIFICATE REQUEST-----', 2)
FROM openca2.request 
WHERE req_key = 3874;

如果您想保留'----开始证书请求---',请改用'----结束标头---'。

谢谢您的回复。两种解决方案都有效

我只是在尝试您的查询时注意到,我正在搜索错误的req_密钥。。。。。如果我有正确的请求键,我的解决方案也会起作用

SELECT substring(data, position('-----BEGIN CERTIFICATE REQUEST-----' in (SELECT data from openca2.request where req_key = 3873)) +0 ,50000) from openca2.request where req_key = 3873
但你的衣服短一些,看起来更好:)

所以这个问题得到了回答。再次感谢你们两位