2015-10-12 72 views
-3

我试图运行一个case语句,并得到主题行错误消息。将数据类型varchar转换为数字时出错

SELECT 
    IndexValue = CONVERT(VARCHAR, 
        CASE WHEN _608 in ('value1', 'value2') 
           THEN _688/100 
           ELSE '' 
        END) 
FROM DB1 
  • 场_608 datetype = VARCHAR(26)
  • 场_688数据类型=十进制(23,10)

我也看了其他问题/答案,不能找到任何答案这个简单的问题。

+0

那么有什么值得不到的呢? –

+0

这只是痛苦的。为什么要在varchar列中存储数字?你在这里混合了数据类型,这是导致你看不到的性能问题。 –

+1

真正的问题是因为您有一个具有混合数据类型的案例表达式。当这个值符合你的标准时,你正在做数学运算,否则你试图使用一个空字符串,它不能被转换为数字。 –

回答

2

查询有太多错误,很难查明它们。

您将转换为varchar,但不指定长度。默认值因上下文而异,因此您应该始终指定长度。您在单个列内混合数据类型。你的列名很简单。你正在用硬编码的整数进行除法,除非_688是一个数字,否则你将得到整数除法,这可能不是你想要的。

尝试沿着这些线。

SELECT IndexValue = isnull(CONVERT(VARCHAR(10), CASE WHEN [_608] in ('value1', 'value2') THEN [_688]/100.0 END), '') 
FROM DB1 
+0

这正是你想要的查询你提供的,但没有另一列提供一个上下文到你的IndexValue它没有多大意义。 –

+0

肖恩兰格,非常感谢您的反馈!我们已经从MySQL转换到SQL Server,尽管它们是相似的,但一些功能有点具有挑战性。 – benjo

相关问题