SQL Server - 是否有为数字提供自然顺序的排序规则?

时间:2013-06-05 09:15:18

标签: sql sql-server-2008 collation

我正在使用SQL Server 2008。

我有一个包含VarChar类型列的表。它目前充满了实际代表数字的字符串。不幸的是,该列必须保持VarChar ('1', '2' ... , '1000' )

我希望查询该字段的最大数值,但由于这是VarChar,我得到的是Lexicographical max而不是自然顺序max。

我以为我会尝试通过对该查询使用COLLATE子句来解决此问题,并更改为提供数字自然顺序的排序规则,如此link

  1. 对于SQL Server 2008是否有这样的排序规则,如果有,那么查询应该是什么?
  2. 如果存在这样的排序规则,我应该使用此方法还是应该使用强制转换?
  3. 感谢。

3 个答案:

答案 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);

An SQLfiddle to test with

答案 2 :(得分:2)

没有排序规则选项会对数字执行自然排序。

但是,如果期望所有值都是整数,则可以将值转换为整数。

尝试类似

的内容
SELECT MAX(CAST (Value as int))
FROM MyTable