2012-07-02 107 views
1

我有一个奇怪的问题。不能强制nvarchar浮动

在我的查询中,我选择了5列,其中两个是nvarchar,其形式为数字(仅包含数字和精度点),其他三个是uniqueIdentifiernvarchar

我想在我的SELECT语句中这两列转换为Float但我得到一个错误

不能施放nvarchar的浮动。

我很多次检查了所有这些值的格式。相信我,他们很好。

但是,当我只选择这两列并将它们强制浮动查询成功运行。

我很感谢在这个问题上的任何帮助。

我也可以在这里粘贴查询。但整个查询超过100行,这将是令人沮丧的写作和阅读!

+6

因此,不要张贴100线查询,尽量减少查询的大小降至可管理的范围,但是*仍然存在问题*。通常,在尝试这样做的过程中,您会对潜在问题获得新的见解 - 但现在的问题是,我怀疑我们可以帮助您。 –

+4

相信我,优化者对你没有仇恨。如果没有,你的调试必须意外“证明”某件事情没有问题。你有没有试过'从你的表中选择cast(x作为float)?如果这两列中的任何一个都失败,那么您知道***至少有一个值与该演员表不兼容。然后尝试'按照x asc'从yourTable顺序选择顶部100 x,然后'desc';问题的价值往往处于极端。 – MatBailie

+0

我试过这个。 “从你的表中选择cast(x作为float)”效果很好。当我选择旁边的另一列时,问题就会上升。 – Ashkan

回答

3

肯定会需要您提供更多信息才回答。你能发布你的一些代码吗(或者是你的问题的一小部分)?也许你的表格定义呢?

因为所有的值都是数值,所以为什么要将该列作为nvarchar?

最后,您的任何数据是否都包含美元符号($)?

这工作:

DECLARE @Text nvarchar(100) 

SET @Text = '1234.567' 

SELECT CONVERT(float, @Text) AS ColumnValue 

那么,这是否:

DECLARE @Text nvarchar(100) 

SET @Text = ' 1234.567 ' 

SELECT CONVERT(float, @Text) AS ColumnValue 

但这并不:

DECLARE @Text nvarchar(100) 

SET @Text = '$1234.567' 

SELECT CONVERT(float, @Text) AS ColumnValue 
0

没有看到您的查询不知道,但我认为这应该工作:

SELECT CONVERT(Float(2), LTRIM(RTRIM(<nVarchar Column>))) AS Amount FROM ...... 
+1

想知道为什么OP将金额保存为nvarchar。 – abatishchev

+1

针对性能较差的设计。 – Geek