SQL服务器中针对varchar数据的算术运算符

时间:2009-01-13 16:27:53

标签: sql-server

有人可以向我解释算术运算符如>或者<比较SQL Server 2005中的字符串?

3 个答案:

答案 0 :(得分:1)

如果它们是针对数字字段的,那么它们就像您期望的那样工作。如果它是针对字符类型的数据字段,它们将按字母顺序工作。因此,如果您想要大于(>)10且小于(<)20,您可能会得到11,110,123456作为回应。

这就是为什么存储您希望能够进行数学计算或与varchar(或任何其他类型的char数据)进行比较的数字总是一个坏主意。只有那些不需要数学计算的数字(电话,邮政编码,邮政编码等)才能以这种方式存储,并且应始终存储在字符类型字段中,以便考虑前导零。

答案 1 :(得分:1)

排序(以及<>运算符)取决于您的SQL Server排序规则: http://msdn.microsoft.com/en-us/library/ms144250(SQL.90).aspx

您必须在网上找到整理的规则。请注意,它们通常非常复杂。为了你的缘故,我会尽量避免<和>比较VARCHAR,除非你真的,真的需要。

答案 2 :(得分:1)

感谢您的快速回复。

我问的原因是我需要查询英国邮政编码的数据库表。有问题的表有两个邮政编码列,“from_postcode”和“to_postcode”,我需要确定给定的邮政编码是否介于这些值之间。

幸运的是,数据的布局方式使我认为我应该能够使用算术运算符来至少获得潜在匹配行的子集。

我有时间写一些(或者可能是少数)单一测试!