当数字存储为字符串时,从表中选择最高数字?

时间:2011-08-06 23:45:16

标签: c# sql sql-server

我正在尝试在C#.Net 4中编写一个Windows窗体应用程序,它连接到SQL Server 2008数据库,我想从一个表中选择最大数字,其中数字存储为字符串!

string SQL = "select MAX(CONVERT(int, myField)) from myTable where myCode = '" + theCust + "'";

我也在select语句中尝试了Max(CAST(myField as Int))但是两个都没有返回任何东西,即使数据库有forcust两行10001和10002.Yer i Get是“枚举没有产生结果“

我做错了什么?

我正在使用内置的System.Data.SqlClient,如果我只是做一个

string SQL = "select myField from myTable where myCode = '" + theCust + "'";

它将两个数字作为字符串返回。我知道我可以在代码中对它们进行排序,但如果数据库变大则不是一个好方法!

我刚刚尝试使用db中的int字段并仍然得到相同的错误! Max是错误的用法吗?

2 个答案:

答案 0 :(得分:5)

你可以这样试试:

SELECT TOP 1 CAST(MyColumn AS int) AS TheMax
FROM MyTable
ORDER BY TheMax DESC

所以(使用草率方法,总是使用paramaterize!)

String sql = "SELECT TOP 1  CAST(MyColumn AS int) AS TheMax FROM MyTable WHERE MyParam = '" + param + "' ORDER BY TheMax Desc";
//Fill DataAdapter/DataReader etc.

答案 1 :(得分:1)

在您的数据库中使用此功能:

CREATE FUNCTION dbo.IsAllDigits (@MyString VARCHAR(8000))
RETURNS TABLE AS
RETURN (
         SELECT CASE 
                WHEN @MyString NOT LIKE '%[^0-9]%'
                THEN 1
                ELSE 0
                END AS IsAllDigits
        )

因为它比T-SQL中的内置ISNUMERIC()更好。

然后,您可以使用此查询来获取无错误地转换为整数类型的字符串集,并像使用TOP 1一样过滤它们。

SELECT TOP 1 MyColumn AS TheMax
FROM MyTable
WHERE IsAllDigits(MyColumn)=1
ORDER BY MyColumn DESC