2017-06-05 68 views
1

我在我的数据库表中有这一列及其字符串。我没有做这个表,我不能改变数据类型。SQL将列转换为浮动在where子句中

但是我需要将它转换为我的where子句中的float,以便我可以将它与浮点数进行比较。

我已经试过了铸造我的专栏,为float:

sql += " AND CAST (ec.bedrooms as float) <= " + id.beds.Max().Split('-')[1] + " AND CAST (ec.bedrooms as float) >= " + id.beds.Min().Split('-')[0]; 

,但没有工作,因为我得到这个错误:

An error occurred while reading from the store provider's data reader. See the inner exception for details 

我在做什么错?

这里是正在为部分

AND CAST (ec.bedrooms as float) <= 3 AND CAST (ec.bedrooms as float) >= 2 

"InnerException":{"Message":"An error has occurred.","ExceptionMessage":"Error converting data type nvarchar to float.","ExceptionType":"System.Data.SqlClient.SqlException","StackTrace":" at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)\r\n at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)\r\n at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)\r\n at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)\r\n at System.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows)\r\n at System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more)\r\n at System.Data.SqlClient.SqlDataReader.Read()\r\n at System.Data.Entity.Core.Common.Internal.Materialization.Shaper`1.StoreRead()"}} 
+3

请出示*实际*生成的查询。 – Siyual

+0

和堆栈跟踪 – hardkoded

+4

您应该真正使用参数来构建SQL查询。 –

回答

0

看起来你ec.bedrooms产生什么是具有非数字值......您可以检查象下面这样:

sql += " AND CAST (iif(isnumeric(ec.bedrooms)>0,ec.bedrooms,null) as float) <= " + id.beds.Max().Split('-')[1] + " AND 
CAST (iif(isnumeric(ec.bedrooms)>0,ec.bedrooms,null) as float) >= " + id.beds.Min().Split('-')[0];