将 varchar 转换为 int,将 0 以下的任何值转换为 0

pmd*_*dci 1 sql-server t-sql cast

我将值从 SQL Azure 中的临时表插入到生产表中。临时表中的值是 varchar,而生产表中的目标值是 tinyint(它是人类的年龄字段,所以我认为最多 255 就足够了;))

问题是由于源系统中的错误,我们倾向于将一些值设为 -1 或 -2,而它们应该是 0。这会导致问题,因为 TINYINT 仅支持 0 到 255 的值(也因为这实际上是错误的)。我想知道是否有某种 case 语句可以用来将值转换为 0,如果它们低于 0,或者如果它们落在 0-255 范围之外?

Mar*_*ith 5

因为TINYINT只允许0-255你也可以使用

ISNULL(TRY_CAST(YourCol AS TINYINT),0)
Run Code Online (Sandbox Code Playgroud)

TRY_CAST以上的回报NULL,如果提供了无效的输入数据类型(包括-ve号),我会头脑离开这种方式。

但是,如果您必须将这些更改为0您可以将其包装在ISNULL