问题在SQL Server 2005 Express的

问题描述:

大家下午转换NVARCHAR到INTEGER,问题在SQL Server 2005 Express的

我有一个计算转换成整数的一些问题!本质上我有计算;

CAST(ROUND(SQRT(SQUARE(69.1*(CAST(tblPostCode.PCLat AS DECIMAL(30,15)) - "& 53.078282 &")) + SQUARE(69.1 * (CAST(tblPostCode.PCLng AS DECIMAL(30,15)) - "& -2.271495 &") * COS(CAST(tblPostCode.PCLat AS DECIMAL(30,15))/57.3))),0) AS INTEGER) 

(它计算经度,纬度之间的距离从POST代码)

现在,我可以在SELECT语句中使用这个值,输出的ISNUMERIC()返回true!然而,当我尝试在WHERE语句WHERE .... <= 150中限制此值时,我收到了返回的“错误,将NVARCHAR转换为INTEGER”消息。

任何人都可以帮忙吗?我试过CONVERT和CAST,如果我添加有限的WHERE ISNUMERIC(...) = 1,我没有输出值!

所有帮助表示赞赏

最亲切的问候 皮特W¯¯

+0

什么代码...? – EFraim 2010-09-29 11:49:41

+4

' - “&-2.271495&”'东西是完全无效的。你可以发布运行的代码吗?编辑:除非你确实有一个名为'&-2.271495&'的列? – 2010-09-29 11:51:23

+0

你能提供问题的表结构和样本数据吗? – 2010-09-29 11:57:01

我常数值(5,6),以测试你的查询替换您的表引用(tblPostCode.PCLng,tblPostCode.PCLat)。正如马丁史密斯在他的评论中已经提到的那样,引号中的表达是完全无效的。这可能是以前的查询的遗留物吗? SQL所做的是试图将表达式转换为由于引号中的“&”而失败的整数。如果删除标记,并保持恒定的值,它的工作对我来说:

SELECT CAST(ROUND(SQRT(SQUARE(69.1 
           * (CAST(5 AS DECIMAL(30, 15)) 
            - 53.078282)) + SQUARE(69.1 
                   * (CAST(6 AS DECIMAL(30, 
                   15)) 
                   - 2.271495) 
                   * COS(CAST(5 AS DECIMAL(30, 
                   15))/57.3))), 
        0) AS INTEGER) 

结果是:

3332 
+1

??给你的异常“&-2.271495&”的理由会更有帮助。 – JanW 2010-09-29 15:23:39

+0

是的你是正确的,“&&”是我复制和粘贴我的ASP代码。 奇怪的是,查询将运行,输出两组纬度/多头之间的距离,但是当我尝试使用的计算,以便找到成员谁住 2010-09-29 16:16:01

+0

非常感谢,现在发布已排序。数据库模式中的数据类型不一致 – 2010-09-29 19:26:53