【问题标题】:How to convert 52:34 string value to bigint如何将 52:34 字符串值转换为 bigint
【发布时间】:2018-07-14 23:32:24
【问题描述】:

如何转换一个值52:35,它作为字符串存储在数据库中,我只希望在 PostgreSQL 数据库中的 BigInt 值中的52 作为查询。

我尝试了以下查询

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

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

【问题讨论】:

  • 为什么是java 标签?在java中进行解析是否有效?这还不清楚。

标签: string postgresql casting bigint


【解决方案1】:

你可以使用split_part(string text, delimiter text, field int)

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

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

【讨论】:

    【解决方案2】:

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

    CASE WHEN strpos(a,':') > 0 
        THEN cast(substr(a,1,strpos(a,':')-1) AS bigint
        else null
    END
    

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

    【讨论】:

    • 对于split_part,当没有分隔符并且你取第一个字段时,它将返回整个字符串。
    • 感谢 Jim Garrison,,,, 上面的查询部分有效。 :)
    猜你喜欢
    • 2015-06-02
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 2012-08-02
    • 1970-01-01
    • 2016-06-08
    相关资源
    最近更新 更多