【发布时间】:2016-11-03 20:49:44
【问题描述】:
SQL Server 2012
我的表中有 3 列将使用一个函数。 '[usr].[Udf_OverPunch]'。和子字符串。
这是我的代码:
[usr].[Udf_OverPunch](SUBSTRING(col001, 184, 11)) as REPORTED_GAP_DISCOUNT_PREVIOUS_AMOUNT
此功能适用于我需要它执行的操作。它基本上是根据数据字典将符号或字母转换为指定的数字。
我遇到的问题是有前导零。我刚刚问了一个关于前导零的问题,但由于符号无法转换为 int,它不允许我对函数列进行处理。
这是我用来在其他列的代码中去掉前导零(但留下一个零)的方法:
cast(cast(SUBSTRING(col001, 217, 6) as int) as varchar(25)) as PREVIOUS_REPORTING_PERIOD
这在将“000000”的值转换为“0”或将“000060”的值转换为“60”时效果很好,但由于符号或字母(当尝试转换为整数)。
正如我所提到的,我有 3 列在不使用函数时产生的值看起来像这样:
'0000019753{'
'0000019748G'
'0000019763H'
我的目标是在使用该函数的同时删除前导零(除非它们全为零,然后保留一个零)。
这是我尝试的但不起作用,因为该值包含一个不是整数的字符:
[usr].[Udf_OverPunch]cast(cast(SUBSTRING(col001, 184, 6) as int) as varchar(25)) as REPORTED_GAP_DISCOUNT_PREVIOUS_AMOUNT,
如果您有任何想法或需要更多信息,请告诉我。 :)
【问题讨论】:
-
在这里非常需要一些建议。这需要在明天之前完成。这是整个过程完成的唯一事情。
-
我已经回答了您的问题,但是,根据您的数据,可能会有更清洁的解决方案。它总是相同的长度吗? is 总是由数字和 + 结尾的单个非数字字符组成?
标签: sql sql-server function tsql leading-zero