C# Sqlite无法正确比较十进制数
我遇到了一个奇怪的问题,数字列上的比较不能给出正确的结果。输入是相同的,但如果应用了coalesce函数,则突然没有行匹配 该表定义如下:C# Sqlite无法正确比较十进制数,c#,.net,sqlite,system.data.sqlite,C#,.net,Sqlite,System.data.sqlite,我遇到了一个奇怪的问题,数字列上的比较不能给出正确的结果。输入是相同的,但如果应用了coalesce函数,则突然没有行匹配 该表定义如下: CREATE TABLE orders ( orderid INT NOT NULL, freight NUMERIC, PRIMARY KEY (orderid), ); 我正在使用以下方法测试查询: private void Problematic(IDbConnection connection)
CREATE TABLE orders
(
orderid INT NOT NULL,
freight NUMERIC,
PRIMARY KEY (orderid),
);
我正在使用以下方法测试查询:
private void Problematic(IDbConnection connection)
{
using (var cmd = session.Connection.CreateCommand())
{
cmd.CommandText =
@"select order0_.OrderId as OrderId55_,
order0_.Freight as Freight55_,
from
Orders order0_
where
coalesce(order0_.Freight, @p0) > @p1"; // ALT 1
// order0_.Freight > @p1"; // ALT 2
var p0 = cmd.CreateParameter();
p0.ParameterName = "p0";
p0.DbType = DbType.Decimal;
p0.Value = 100;
cmd.Parameters.Add(p0);
var p1 = cmd.CreateParameter();
p1.ParameterName = "p1";
p1.DbType = DbType.Decimal;
p1.Value = 0;
cmd.Parameters.Add(p1);
using (var reader = cmd.ExecuteReader())
{
// ALT 1 above yields 0 result rows.
// ALT 2 above yields 830 result rows.
}
}
}
运费列可以为null,但所有实际值都不为null且大于0。因此,我希望这两个查询生成相同数量的匹配行
我正在使用此查询分析类型:
select
typeof(@p0),
typeof(@p1),
typeof(coalesce(order0_.Freight, @p0)),
typeof(order0_.Freight),
coalesce(order0_.Freight, @p0) > @p1,
order0_.Freight > @p1
from
Orders order0_
所有行的结果为:
typeof(@p0) => text
typeof(@p1) => text
typeof(coalesce(order0_.Freight, @p0)) => real
typeof(order0_.Freight) => real
coalesce(order0_.Freight, @p0) > @p1 => 0
order0_.Freight > @p1 => 1
有人能解释为什么不同的表达式会产生不同的结果吗?显然,您的数据库驱动程序会将DBType.Decimal转换为文本
改用DBType.Double。如果同时使用ifnull,是否会发生同样的情况?即,如果零订单0.运费,@p0>@p1