我一直收到错误:
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.00000
或3.11400
之类的值。
目标是仅显示高于0的值。
编辑:我忘了添加EXEC sp_help PS_DZ_TIME_VW
告诉我A.DZ_TIME_HOURS
是十进制类型,长度为5,精确度为7,等级为5。
答案 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数据库中,查询运行没有问题。
谢谢大家的帮助!