String 如何将52:34字符串值转换为bigint

String 如何将52:34字符串值转换为bigint,string,postgresql,casting,bigint,String,Postgresql,Casting,Bigint,如何强制转换一个值52:35,该值作为字符串存储在数据库中,我只想在PostgreSQL数据库中的BigInt value中使用52作为查询 我尝试了以下查询 select cast(substr(a,1,strpos(a,':')-1) AS bigint) as value from abc 它返回了一个错误“不允许负子字符串长度”当查询遇到不包含冒号的值时,查询将失败:。使用case…when…else…end构造仅当值包含冒号时才尝试提取。类似于(未经测试) 对于else案例,请替换您

如何强制转换一个值
52:35
,该值作为字符串存储在数据库中,我只想在PostgreSQL数据库中的BigInt value中使用
52
作为查询

我尝试了以下查询

select cast(substr(a,1,strpos(a,':')-1) AS bigint) as value from abc

它返回了一个错误“不允许负子字符串长度”

当查询遇到不包含冒号的值时,查询将失败
。使用
case…when…else…end
构造仅当值包含冒号时才尝试提取。类似于(未经测试)


对于
else
案例,请替换您需要的任何内容。也可能有一种方法可以使用
分割部分(…)
而不是上面提到的,但是我很难找到说明如果分隔符不存在会发生什么的文档。

当查询遇到不包含冒号的值时,查询将失败。
。使用
case…when…else…end
构造仅当值包含冒号时才尝试提取。类似于(未经测试)

对于
else
案例,请替换您需要的任何内容。也可能有一种方法可以使用
split\u part(…)
来代替上面的方法,但是我很难找到说明如果分隔符不存在会发生什么情况的文档。

您可以使用

你可以用


为什么使用
java
标记?用java进行解析有效吗?这还不清楚。为什么使用
java
标记?用java进行解析有效吗?这是不清楚的。对于
split\u part
来说,如果没有分隔符,并且您使用第一个字段,那么它将返回整个字符串。谢谢Jim Garrison,,,,上面的查询部分工作了。:)对于
split\u part
而言,如果没有分隔符,并且您使用第一个字段,那么它将返回整个字符串。谢谢Jim Garrison,,,,上面的查询部分工作正常。:)
CASE WHEN strpos(a,':') > 0 
    THEN cast(substr(a,1,strpos(a,':')-1) AS bigint
    else null
END
postgres=# select split_part('52:35', ':', 1)::bigint;
 split_part
------------
         52

postgres=# select split_part('52', ':', 1)::bigint;
 split_part
------------
         52