在我编写的测试案例中,字符串比较似乎在SQL Server/.NET CLR之间的工作方式不同。

此C#代码:

string lesser =  "SR2-A1-10-90";
string greater = "SR2-A1-100-10";

Debug.WriteLine(string.Compare("A","B"));
Debug.WriteLine(string.Compare(lesser, greater));

将输出:
-1
1

此SQL Server代码:
declare @lesser varchar(20);
declare @greater varchar(20);

set @lesser =  'SR2-A1-10-90';
set @greater = 'SR2-A1-100-10';

IF @lesser < @greater
    SELECT 'Less Than';
ELSE
    SELECT 'Greater than';

将输出:
Less Than

为什么会有所不同?

最佳答案

这是documented here

Windows排序规则(例如Latin1_General_CI_AS)使用Unicode类型的排序规则。 SQL排序规则没有。

这导致在两者之间对连字符的区别对待。

关于c# - .NET和T-SQL之间的字符串比较差异?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3808158/

10-12 14:15