在我编写的测试案例中,字符串比较似乎在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/