我正在使用SQL Server 2008。
我有一个包含VarChar
类型列的表。它目前充满了实际代表数字的字符串。不幸的是,该列必须保持VarChar ('1', '2' ... , '1000' )
。
我希望查询该字段的最大数值,但由于这是VarChar
,我得到的是Lexicographical max而不是自然顺序max。
我以为我会尝试通过对该查询使用COLLATE
子句来解决此问题,并更改为提供数字自然顺序的排序规则,如此link
感谢。
答案 0 :(得分:2)
只需注意,第三个选项是使用持久计算列 - 这是投射到数字的值
这样,它只会在创建或更新时施放一次
-- Create Table with computed column
CREATE TABLE [dbo].[CCtest]
(
[myString] [varchar] NULL,
[myInt] AS (cast(myString as int)) PERSISTED
)
GO
然后可以在计算列上创建索引。
答案 1 :(得分:2)
如果所有值都是数字,您只需按转换为int的值排序,而无需更改排序规则或表结构;
SELECT * FROM test ORDER BY CONVERT(INT, value);
答案 2 :(得分:2)
没有排序规则选项会对数字执行自然排序。
但是,如果期望所有值都是整数,则可以将值转换为整数。
尝试类似
的内容SELECT MAX(CAST (Value as int))
FROM MyTable