【问题标题】:to_char(number) function in postgrespostgres 中的 to_char(number) 函数
【发布时间】:2012-12-18 19:17:33
【问题描述】:

我想使用 to_char() 函数将数字显示/转换为字符(长度相同)。

在 oracle 中我可以这样写

SELECT to_char(1234) FROM DUAL

但是在 postgres 中 SELECT to_char(1234) 不工作。

【问题讨论】:

    标签: postgresql postgresql-9.1


    【解决方案1】:

    您需要提供格式掩码。在 PostgreSQL 中没有默认值:

    select to_char(1234, 'FM9999');
    

    如果你不知道有多少位,只估计最大值:

    select to_char(1234, 'FM999999999999999999');
    

    如果数字的位数较少,则不会产生任何副作用。

    如果您不需要任何格式(如小数点、千位分隔符),您也可以简单地将值转换为文本:

    select 1234::text
    

    【讨论】:

    • 如何找出不同值(不同长度)的第二个参数(具有指定位数的值)。
    • @jobi88:这一切都记录在手册中:postgresql.org/docs/current/static/functions-formatting.html
    • 我找不到适合我的确切信息。有什么办法可以得到,我需要添加多少个 9 才能获得完整的数字。例如,在 oracle 中我可以这样写。从帐户中选择 to_char(ac_no)。 (这里 ac_no 值可能有不同的长度)。在这种情况下,我怎样才能找到第二个参数??
    【解决方案2】:

    你必须指定一个数字格式,即:

    to_char(1234, '9999')
    

    点击此处了解更多信息:http://www.postgresql.org/docs/current/static/functions-formatting.html

    【讨论】:

      【解决方案3】:

      CAST 函数对我有用。

      SELECT CAST(integerv AS text) AS textv
      FROM (
             SELECT 1234 AS integerv
           ) x
      

      SELECT integerv::text AS textv
      FROM (
             SELECT 1234 AS integerv
           ) x
      

      【讨论】:

        【解决方案4】:

        你可以使用:

        1234||''
        

        它适用于大多数数据库。

        【讨论】:

        • 我简直无法理解为什么使用连接强制隐式类型转换比显式转换更好。
        • @Merlin 这更兼容。因此,您可以对多个数据库使用相同的 SQL。
        猜你喜欢
        • 2015-09-30
        • 2015-04-29
        • 2021-05-13
        • 2021-09-17
        • 1970-01-01
        • 2019-10-18
        • 1970-01-01
        • 2019-10-16
        • 2019-03-21
        相关资源
        最近更新 更多