首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择十进制>0的行时出错

问选择十进制>0的行时出错
EN

Stack Overflow用户
提问于 2014-03-21 10:03:01
回答 3查看 55关注 0票数 0

我不断地发现错误:

代码语言:javascript
复制
Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to numeric.

执行此查询时:

代码语言:javascript
复制
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、Prec 7和刻度5的十进制类型。

​

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-21 12:23:32

一位同事想出了一个解决方案/解决办法:

代码语言:javascript
复制
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中,查询运行时没有问题。

谢谢大家的帮助!

票数 0
EN

Stack Overflow用户

发布于 2014-03-21 10:11:12

试着强迫演员上场吗?(您可能需要指定长度、精度\刻度等):

代码语言:javascript
复制
CAST(A.DZ_TIME_HOURS AS DECIMAL) > 0

只是注意到你的校对。对我来说很陌生。这可能会产生影响,因为不同的数据类型根据本地的不同而被不同的对待。但是十进制\VARCHAR问题似乎很奇怪..。

票数 0
EN

Stack Overflow用户

发布于 2014-03-21 10:12:26

由于您的列是十进制类型,所以不应该发生此错误,但仍然显式地将该列转换为十进制并尝试。但不太确定这是否会有帮助。还尝试使用0.0而不是0进行检查。

代码语言:javascript
复制
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

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22555617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档