4

我正在使用 SQL Server 2008。

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

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

我想我会尝试通过使用该COLLATE查询的子句来解决这个问题,并更改为提供数字自然顺序的排序规则,就像在这个链接中一样

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

谢谢。

4

3 回答 3

2

请注意,第三种选择是使用持久计算列 - 这是转换为数字的值

这样它只会被投射一次 - 在创建或更新时

-- Create Table with computed column
CREATE TABLE [dbo].[CCtest]
(
[myString] [varchar] NULL,
[myInt] AS (cast(myString as int)) PERSISTED
)
GO

然后可以在计算列上创建索引。

于 2013-06-05T09:21:00.487 回答
2

如果所有值都是数字,您可以简单地按转换为 int 的值排序,而无需更改排序规则或表结构;

SELECT * FROM test ORDER BY CONVERT(INT, value);

一个用于测试的 SQLfiddle

于 2013-06-05T09:23:40.580 回答
2

没有排序选项可以对数字执行自然排序。

但是,如果所有值都应为整数,则可以将该值强制转换为整数。

尝试类似的东西

SELECT MAX(CAST (Value as int))
FROM MyTable
于 2013-06-05T09:24:58.443 回答