【问题标题】:Trim Leading Zeroes Only If Numeric仅在数字时修剪前导零
【发布时间】:2021-04-16 21:59:41
【问题描述】:

我有一列包含数字和字母数字值的组合。当值是严格的数字时,数据库用前导零存储它(但不总是),但如果不是,则不是。

以下是一些示例数据:

我需要将这些值用作我将用来连接到另一个表的字符串的一部分。不幸的是,与另一个表中的该字段相对应的字符串部分会剪掉任何纯数字值的前导零。我很难找到一种仅在这种情况下剪断前导零的方法。

我找到了这个解决方案,但它不适用于 SQL Server (2012)。 Trim leading zeroes if it is numeric and not trim zeroes if it is alphanumeric

我也看到了这一点,但它也从示例中显示的连字符值中删除了前导零,这不起作用。 Better techniques for trimming leading zeros in SQL Server?

帮助!谢谢!

【问题讨论】:

    标签: sql sql-server sql-server-2012


    【解决方案1】:

    你可以使用:

    select (case when col not like '%[^0-9]%'
                 then convert(varchar(255), try_convert(numeric(38), col))
                 else col
            end)
    

    这适用于前导零后最多 38 位数字

    【讨论】:

      【解决方案2】:

      数据库不会在varchar(文本)字段中存储任何内容,除了您提供的内容。如果你给它前导零,它会保存它们,它没有理由不这样做,因为它只是一段文本。

      对于您的问题,您可以这样做:

      ISNULL(CAST(TRY_CAST(field AS numeric(38)) AS varchar(insert_field_length))), field)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-13
        • 1970-01-01
        相关资源
        最近更新 更多