c# - .NET 和 T-SQL 之间的字符串比较差异?

标签 c# sql sql-server string comparison

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

相关文章:

c# - 如何计算路径上的点?

c# - 将 json 字符串作为参数传递给 webmethod

sql - 选项重新编译使查询速度更快 - 好还是坏?

mysql - 我应该如何构建我的表格?

c# - NHibernate "Could not determine type for X"错误

sql - 数据库中已经有一个名为 '#result' 的对象

sql-server - 人们用什么来单元测试他们的存储过程等

php - SQL从表中选择并获取表名

sql - 用 XML 输出替换 sql 中的文本

c# - 使用 Assembly.LoadFrom 加载泛型类型