问题描述
我有一列包含数字和字母数字值的组合。当值是严格的数字时,数据库会使用前导零(但不总是)存储它,但如果不是,则不会。
以下是一些示例数据:
我需要将这些值用作字符串的一部分,用于连接到另一个表。不幸的是,与另一个表中的此字段对应的字符串部分剪掉了任何纯数字值的前导零。我很难找到一种仅在这种情况下截断前导零的方法。
我找到了这个解决方案,但它不适用于 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?
帮助!谢谢!
解决方法
您可以使用:
select (case when col not like '%[^0-9]%'
then convert(varchar(255),try_convert(numeric(38),col))
else col
end)
这适用于前导零后最多 38 位
,数据库不会在 varchar
(文本)字段中存储任何内容,除了您提供的内容。如果你给它前导零,它会保存它们,它没有理由不这样做,因为它只是一段文本。
对于您的问题,您可以这样做:
ISNULL(CAST(TRY_CAST(field AS numeric(38)) AS varchar(insert_field_length))),field)