我正在使用SQL Server 2012 SP2开发数据库。
我有一个包含NVARCHAR(20)列的表,它将包含数字:“000001”,“000002”等。
我需要在该列中获得最大值并将其转换为int。我该怎么办?
我发现我可以用这个sql语句将nvarchar转换为int:
SELECT CAST(YourVarcharCol AS INT) FROM Table
但我不知道如何获得该列中的最大值,因为数字是nvarchar。
更新
顺便说一下,这个列是NVARCHAR,因为我需要在其上存储文本。我正在测试我的解决方案,我需要存储 ONLY 数字来测试它。
答案 0 :(得分:4)
如果您的数字在给定的示例中填充,并且所有数字都具有相同的宽度,则可以对它们进行排序字母数字,然后再投射 max-value 到INT
或BIGINT
(取决于您的号码范围)。
如果行数非常多快得多,特别是如果此列上有索引...
像
这样的东西SELECT TOP 1 * FROM YourTable
ORDER BY NumberColumn DESC
或者,如果您只需要max-value:
SELECT MAX(NumberColumn) FROM YourTable
如果您必须处理负数或处理不同的数字,您必须先将其强制转换
SELECT TOP 1 * FROM YourTable
ORDER BY CAST(NumberColumn AS INT) DESC
或
SELECT MAX(CAST(NumberColumn AS INT)) FROM YourTable
请注意:
ISNUMERIC()
。答案 1 :(得分:3)
试试这个...
我认为MAX
就足够了。
SELECT max(CAST(YourVarcharCol AS INT)) FROM Table
答案 2 :(得分:2)
试试这个
SELECT MAX(t.Y) from (SELECT CAST(YourVarcharCol AS INT) as Y FROM Table) t
答案 3 :(得分:2)
您应该尝试找到最高值:
SELECT MAX(CAST(YourVarcharCol AS INT)) AS FROM Table
答案 4 :(得分:2)
这将返回max int value
SELECT MAX(IIF(ISNUMERIC(YourVarcharCol) = 1, YourVarcharCol, '0') * 1) FROM Table
答案 5 :(得分:2)
如果所有数据都遵循相同的填充和格式化模式,则可以使用简单的max(col)。
但是,如果没有,则必须先将值转换为int。搜索转换为其他数据类型的列将不使用索引,如果有,则会扫描整个表。它可能适合您,也可能不适合您,具体取决于表中的要求和行数。如果性能是您所需要的,那么将计算列创建为try_cast(col as int),并在其上创建索引。
请注意,您不应该使用强制转换,而是使用try_cast来防止无法转换的值(如果使用数据类型存储某些基本上属于另一种数据类型的值,它总是会为错误)。
但是,如果你可以将原始列的类型更改为int,那将是最好的。
答案 6 :(得分:1)
你可以这样使用
select max(cast(ColumnName AS INT ))from TableName