[英]T-SQL :: Error converting data type varchar to numeric when changing 1 to 0.5
我正在使用CASE
编写一个复杂的 T-SQL 查询,这将帮助我根据每个数据库的大小计算迁移数据库需要多长时间:
SELECT
ProductVersion
,CompatibilityLevel
,convert(numeric(10,2), substring([Size], 1, (len([Size]) - 3))) as [Size in MB]
,CASE
when ProductVersion < '11%' THEN 1
when ProductVersion = NULL then 1
ELSE ''
END +
CASE
when CompatibilityLevel < '110' then 1
when CompatibilityLevel = NULL then 1
ELSE ''
END +
CASE
when convert(numeric(10,2), substring([Size], 1, (len([Size]) - 3))) < 100.00 THEN 1 -- Here is the problem
ELSE ''
END AS [Hours of work]
FROM MyDatabaseList
很好,当我为每个小于 100.00 MB 的数据库设置 1 小时的工作时,它就可以工作。
此外,所有其他值都被求和,在“工作时间”列中,您可以看到诸如0
、 1
、 3
、 2
之类的数字……这意味着 SQL 服务器正在计算值。 都好。
但是,告诉我的经理我必须为一个只有 100.00 MB 大小的数据库工作 1 小时是荒谬的。
让我们换行:
when convert(numeric(10,2), substring([Size], 1, (len([Size]) - 3))) < 100.00 THEN 1
让我们把0.5
而不是1
:
when convert(numeric(10,2), substring([Size], 1, (len([Size]) - 3))) < 100.00 THEN 0.5
...然后砰 - 我收到这个错误:
消息 8114,第 16 层,State 5,第 1 行
将数据类型 varchar 转换为数字时出错。
问题:
Line 1
上显示? 错误必须在Line 16
,对吗?该错误告诉您转换发生在从第 1 行开始的语句中。
至于为什么,这是因为''
不能转换为numeric
,但可以转换为int
。
SELECT CONVERT(decimal(2,1),'')
--Error converting data type varchar to numeric.
GO
SELECT CONVERT(int,'')
--
GO
您之前将其转换为int
(文字1
是int
)。 改掉用''
表示数字的习惯; 根据定义,它不是数字,它是零长度字符串。 如果您想要零,请使用0
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.