SQL转换列在where子句中浮动

时间:2017-06-05 14:55:41

标签: asp.net sql-server

我的数据库表中有这个列,它是一个字符串。我没有制作这个表,我无法更改数据类型。

但是我需要将它转换为我的where子句中的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()"}}

1 个答案:

答案 0 :(得分: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];