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