我想知道是否有更好的方法将 Varchar 解析为 TSQL / SQL Server 中的 Int。我说“解析”是因为我需要比 CAST/CONVERT 系统功能更强大的东西;当解析失败时返回 NULL 甚至是“默认”值特别有用。
所以这是我现在使用的函数,最初是从某人的SQL博客中获得的(甚至不记得具体是谁)......
更改功能 [dbo].[udf_ToNumber]
(
@Str varchar(最大值)
)
返回整数
作为
开始
声明@Result int
SET @Str = LTRIM(RTRIM(@Str))
IF (@Str='' 或 @Str 为空
或 ISNUMERIC(@Str)=0
或 @Str LIKE '%[^-+ 0-9]%'
或 @Str IN ('.', '-', '+', '^')
)
SET @Result = NULL
别的
IF (CAST(@Str AS NUMERIC(38,0)) 不在 -2147483648 和 2147483647 之间。)
SET @Result = NULL
别的
SET @Result = CAST(@Str AS int)
返回@结果
结尾
(并且您可以在末尾添加一行,例如“如果@Result 为空,则设置@Result =”或类似的内容)。
这不是很有效,因为在 JOIN 或 WHERE-IN-SELECT 中使用它——比如 LEFT 列是 INT,RIGHT 是 VARCHAR,我尝试解析 RIGHT——在任何非常大的数据集上,都需要比我先将 LEFT (INT) 列转换为 VARCHAR 然后执行 JOIN 长得多。
无论如何,我“理想地”知道,如果我的表/数据类型被适当地创建和填充,我首先不需要做这种事情,但我们都知道理想世界有时与现实相去甚远,所以幽默我。谢谢!
编辑:SQL Server 2005 和 2008 版;运行 2005 的盒子将很快升级,因此 2008 特定的答案很好。