关于为什么`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要写在前面)
- 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要写在前面)
我必须编写一个例程,如果变量的类型为number
,则将变量的值加1,否则将变量的值分配为0,其中变量的初始值为null
或undefined
。
第一个实现是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
我的意思是,我想做这样的事情:
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
在sqlserver宝典上又看到了这两个属性,研究了一下。
最后的查询都是推荐方案。不建议使用属性设置的方式!
sql-92 标准要求对空值的等于 (=) 或不等于 (<>) 比较取值为 FALSE。当set ansi_nulls on时,就符合了92标准。
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
如果变量有值,则没有问题.
但如果它没有值,则插入中断错误.
我想问:我们如何通过DbCommand参数将可空的DateTime插入sql?
(P.S.:sql列也可以为空.)
DateTime? myDate = null; DbCommand dbCommand = new DbCommand(); dbCommand.Parameters.Add("NullablesqlDateField",DbType.DateTime,myDate);
解决方法
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等相关知识的信息别忘了在本站进行查找喔。
本文标签: