我在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-----
由于我们想要转移到其他应用程序,我只需要以-----BEGIN CERTIFICATE REQUEST-----
开头的部分。
我尝试在SQL查询中使用子字符串和位置提取此字符串,但即使我尝试使用以下命令查找此字符串的位置:
SELECT position('-----BEGIN CERTIFICATE REQUEST-----' in (SELECT data from openca2.request where req_key = 3874))
我得到一个NULL值。我只能找到提取单个字符串的一部分的例子。
我不知道空间是否有问题。开头和结尾标题中的部分并不总是相同。
可以使用SQL查询完成吗?
答案 0 :(得分:0)
SELECT substr(
data,
position('-----BEGIN CERTIFICATE REQUEST-----' IN data)
)
FROM openca2.request
WHERE req_key = 3874;
答案 1 :(得分:0)
怎么样:
git log
如果您想保留'-----开始证明请求-----',请使用'----- END HEADER -----'。
答案 2 :(得分:0)
感谢您的回复。这两种解决方案都在发挥作用。
当我尝试查询时,我只是注意到我正在搜索错误的req_key .....并且我有正确的req_key,我的解决方案也适用
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
但是你的看起来更好,因为它更短:)
所以回答这个问题。 THX再次给你们两个。