我不断地发现错误:
Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to numeric.执行此查询时:
SELECT A.EMPLID, A.EMPL_RCD, A.DZ_PRESENCE_TYPE, A.DZ_DATE, A.DZ_TIME_HOURS
FROM PS_DZ_TIME_VW A
WHERE A.DZ_PRESENCE_TYPE IN ('P50', 'FORF') AND A.DZ_TIME_HOURS > 0A.DZ_TIME_HOURS是一个十进制值,当我在没有'AND A.DZ_TIME_HOURS > 0'的情况下执行查询时,查询运行良好,并返回0.00000或3.11400之类的值。目标是只显示0以上的值。
编辑:我忘记添加EXEC sp_help PS_DZ_TIME_VW告诉我,A.DZ_TIME_HOURS是长度为5、Prec 7和刻度5的十进制类型。

发布于 2014-03-21 12:23:32
一位同事想出了一个解决方案/解决办法:
SELECT * FROM
(
SELECT EMPLID, EMPL_RCD, DZ_PRESENCE_TYPE, DZ_DATE, SUM(DZ_TIME_HOURS) HOURS
FROM PS_DZ_TIME_VW
GROUP BY EMPLID, EMPL_RCD, DZ_PRESENCE_TYPE, DZ_DATE
) A
WHERE A.HOURS > 0他认为这与数据库处理查询的方式有关。在我们的Oracle db中,查询运行时没有问题。
谢谢大家的帮助!
发布于 2014-03-21 10:11:12
试着强迫演员上场吗?(您可能需要指定长度、精度\刻度等):
CAST(A.DZ_TIME_HOURS AS DECIMAL) > 0只是注意到你的校对。对我来说很陌生。这可能会产生影响,因为不同的数据类型根据本地的不同而被不同的对待。但是十进制\VARCHAR问题似乎很奇怪..。
发布于 2014-03-21 10:12:26
由于您的列是十进制类型,所以不应该发生此错误,但仍然显式地将该列转换为十进制并尝试。但不太确定这是否会有帮助。还尝试使用0.0而不是0进行检查。
SELECT A.EMPLID, A.EMPL_RCD, A.DZ_PRESENCE_TYPE, A.DZ_DATE, A.DZ_TIME_HOURS
FROM PS_DZ_TIME_VW A
WHERE A.DZ_PRESENCE_TYPE IN ('P50', 'FORF') AND CAST(CAST(A.DZ_TIME_HOURS AS FLOAT) AS DECIMAL(7,5)) > 0.0希望这能有所帮助。
https://stackoverflow.com/questions/22555617
复制相似问题