GVKun编程网logo

为什么`null> = 0 && null <= 0',而不是`null == 0`?(为什么null要写在前面)

23

关于为什么`null>=0&&null和为什么null要写在前面的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ALTERTABLE,在nullnull列中设置null,PostgreSQ

关于为什么`null> = 0 && null <= 0',而不是`null == 0`?为什么null要写在前面的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ALTER TABLE,在null null列中设置null,PostgreSQL 9.1、ANSI_NULLS 和 CONCAT_NULL_YIELDS_NULL、c – 为什么函数模板不理解NULL但是使用nullptr?、c# – 如何将Nullable DateTime变量的null值转换为DbNull.Value等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

为什么`null> = 0 && null <= 0',而不是`null == 0`?(为什么null要写在前面)

为什么`null> = 0 && null <= 0',而不是`null == 0`?(为什么null要写在前面)

我必须编写一个例程,如果变量的类型为number,则将变量的值加1,否则将变量的值分配为0,其中变量的初始值为nullundefined

第一个实现是v >= 0 ? v += 1 : v = 0因为我认为没有数字会使算术表达式为假,但是由于null >=0计算为真,所以这是错误的。然后,我得知null行为类似于0,并且以下表达式均被评估为true。

  • null >= 0 && null <= 0
  • !(null < 0 || null > 0)
  • null + 1 === 1
  • 1 / null === Infinity
  • Math.pow(42, null) === 1

当然null不是0。null == 0被评估为false。这使看似重言式的表达成为(v >= 0 && v <= 0) === (v ==0)错误。

为什么null实际上不是0,却像0?

答案1

小编典典

您真正的问题似乎是:

为什么:

null >= 0; // true

但:

null == 0; // false

真正发生的是 大于等于运算符(>=)执行类型强制(ToPrimitive),提示类型为Number,实际上所有关系运算符都具有这种行为。

null 等于运算符==)以特殊方式处理。在简短的,它只 强制转换undefined

null == null; // truenull == undefined; // true

值,例如false''''''0'',和[]被受数字类型强制,它们都强迫到零。

您可以在“抽象相等比较算法”和“抽象关系比较算法”中查看此过程的内部细节。

综上所述:

  • 关系比较:如果两个值都不是String类型,ToNumber则在两个值上都调用。这与+在前面添加a相同,后者将null强制转换为0

  • 平等比较:仅调用ToNumber字符串,数字和布尔值。

ALTER TABLE,在null null列中设置null,PostgreSQL 9.1

ALTER TABLE,在null null列中设置null,PostgreSQL 9.1

我有一个表与非空列,如何设置一个null值在这一列作为默认值?

我的意思是,我想做这样的事情:

postgres=# ALTER TABLE person ALTER COLUMN phone SET NULL;

但它显示:

postgres=# ALTER TABLE person ALTER COLUMN phone SET NULL;
ERROR:  Syntax error at or near "NULL"
LINE 1: ALTER TABLE person ALTER COLUMN phone SET NULL;
ALTER TABLE person ALTER COLUMN phone DROP NOT NULL;

更多细节在手册:http://www.postgresql.org/docs/9.1/static/sql-altertable.html

ANSI_NULLS 和 CONCAT_NULL_YIELDS_NULL

ANSI_NULLS 和 CONCAT_NULL_YIELDS_NULL

在sqlserver宝典上又看到了这两个属性,研究了一下。

 

 

最后的查询都是推荐方案。不建议使用属性设置的方式!

sql-92 标准要求对空值的等于 (=) 或不等于 (<>) 比较取值为 FALSE。当set ansi_nulls on时,就符合了92标准。

c – 为什么函数模板不理解NULL但是使用nullptr?

c – 为什么函数模板不理解NULL但是使用nullptr?

我有一个功能
int f(std::shared_ptr<MyClass> sptr);

之后我编写以下模板以便能够调用它(和其他一些)函数:

template <typename Func,typename ArgType>
auto call(Func func,ArgType arg) -> decltype(func(arg))
{
    return func(arg);
}

当我尝试将此模板与NULL一起使用时,为什么在第三行中出现错误?

auto r0 = f(0); // OK
auto r1 = call(f,nullptr); // OK
auto r2 = call(f,NULL); // ERROR! WHY??

1>------ Build started: Project: ConsoleApplication1,Configuration: Debug x64 ------
1>  main.cpp
1>main.cpp(245): error C2893: Failed to specialize function template 'unkNown-type call(Func,Arg)'
1>          With the following template arguments:
1>          'Func=int (__cdecl *)(std::shared_ptr<MyClass>)'
1>          'Arg=int'
========== Build: 0 succeeded,1 Failed,0 up-to-date,0 skipped ==========

解决方法

线索在这里:
Arg=int

NULL必须是空指针常量,在C 11之前,它必须是一个值为零的整数常量.在您的实现中,它具有int类型,可能是文字0.

因此模板参数推导为int,不能转换为shared_ptr,因此错误.

至于其他人:

auto r0 = f(0); // OK

如果直接传递给函数,则可以将文字0视为空指针常量,并将其转换为shared_ptr.在调用中,参数不是文字,而是int类型的变量,无法转换.

auto r1 = call(f,nullptr); // OK

nullptr有自己的类型,可以转换为shared_ptr.

c# – 如何将Nullable DateTime变量的null值转换为DbNull.Value

c# – 如何将Nullable DateTime变量的null值转换为DbNull.Value

我有一个可以为空的DateTime变量.我想把它写到sql DB.当我尝试插入时:

如果变量有值,则没有问题.

但如果它没有值,则插入中断错误.

我想问:我们如何通过DbCommand参数将可空的DateTime插入sql?

(P.S.:sql列也可以为空.)

DateTime? myDate = null;
DbCommand dbCommand = new DbCommand();
dbCommand.Parameters.Add("NullablesqlDateField",DbType.DateTime,myDate);

解决方法

试试 null coalescing operator:

dbCommand.Parameters.Add("NullablesqlDateField",(object) myDate ?? dbnull.Value);

关于为什么`null> = 0 && null <= 0',而不是`null == 0`?为什么null要写在前面的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ALTER TABLE,在null null列中设置null,PostgreSQL 9.1、ANSI_NULLS 和 CONCAT_NULL_YIELDS_NULL、c – 为什么函数模板不理解NULL但是使用nullptr?、c# – 如何将Nullable DateTime变量的null值转换为DbNull.Value等相关知识的信息别忘了在本站进行查找喔。

本文标签: