选择小数>行时出错0

时间:2014-03-21 10:03:01

标签: sql sql-server sql-server-2008

我一直收到错误:

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 > 0

A.DZ_TIME_HOURS是十进制值,当我执行不带'AND A.DZ_TIME_HOURS > 0'的查询时,查询运行正常并返回0.000003.11400之类的值。 目标是仅显示高于0的值。

编辑:我忘了添加EXEC sp_help PS_DZ_TIME_VW告诉我A.DZ_TIME_HOURS是十进制类型,长度为5,精确度为7,等级为5。 Screenshot

3 个答案:

答案 0 :(得分:0)

尝试逼迫施法? (您可能需要指定长度精度\比例等):

CAST(A.DZ_TIME_HOURS AS DECIMAL) > 0

刚注意到你的整理。对我来说似乎不熟悉。这可能会产生影响,因为根据本地不同的数据类型会有不同的处理方式。但DECIMAL \ VARCHAR问题似乎很奇怪......

答案 1 :(得分:0)

由于您的列是十进制类型,因此不应发生此错误,但仍会显式将列转换为十进制并尝试。不太确定这是否会有所帮助。另请尝试使用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

希望这有帮助。

答案 2 :(得分:0)

一位同事提出了解决方案/解决方法:

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数据库中,查询运行没有问题。

谢谢大家的帮助!