Php 与4gl中的NULL值和日期进行比较
我有一个从数据库提交的值,它是informix中的一个日期。有时该值将为null,否则它将是一个日期。我将该值与今天的日期进行比较,如下所示Php 与4gl中的NULL值和日期进行比较,php,database,date,informix,4gl,Php,Database,Date,Informix,4gl,我有一个从数据库提交的值,它是informix中的一个日期。有时该值将为null,否则它将是一个日期。我将该值与今天的日期进行比较,如下所示 if(value_from_db <= todays_date){ //display Todays greater } else{ //Display Todays smaller } 这将输出 Todays greater 我很困惑。非常感谢任何帮助。它将输入否则您可以选择=todays\u date,因为NULL既不大也不小 您应该
if(value_from_db <= todays_date){
//display Todays greater
}
else{
//Display Todays smaller
}
这将输出
Todays greater
我很困惑。非常感谢任何帮助。它将输入
否则
您可以选择=todays\u date
,因为NULL
既不大也不小
您应该在查询中有一些东西,可以从_db中为该值_提供燃料,从而不返回空值或在IF中专门为它们进行验证
下面是一个测试步骤:
CREATE TABLE datet(date1 DATE);
INSERT INTO datet VALUES(null);
CREATE PROCEDURE validateNullDate()
RETURNING char(5)
DEFINE dateVar DATE;
SELECT date1 INTO dateVar FROM datet;
IF dateVar <= TODAY THEN
RETURN "if";
ELSE
RETURN "else";
END IF
END PROCEDURE;
创建表datet(date1日期);
插入日期值(空);
创建过程validateNullDate()
返回字符(5)
定义dateVar日期;
从datet中选择date1到dateVar;
如果dateVar=TODAY,则
。你总是会得到“其他”
编辑:
关于将strotime(NULL)小于今天的问题,您可以在以下方面找到一个很好的解释:
空值由strotime解释为0,因为它希望传递一个
整数时间戳。时间戳为0表示1-1-1970
因此,如果。空值(或?)在ABL中是奇怪的生物,那么它将出现在if中-处理它们的最佳方法是明确地测试它们,如下所示:
IF value_from_db <> ? AND value_from_db > some-date THEN
/* do something */
ELSE
/* DO something else. */
如果值来自\u db?然后从某个日期计算值
/*做点什么
其他的
/*做点别的*/
简单地说,任何涉及的变量为NULL
的算术比较都将导致false
,这意味着当前形式的代码将转到ELSE
子句
您需要显式测试NULL
,例如
IF value_from_db IS NULL THEN
/* display date is unknown */
ELSIF value_from_db <= TODAY THEN
/* display date is in the past */
ELSE
/* display date is in the future */
END IF;
如果来自\u db的值\u为空,则
/*显示日期未知*/
感谢您的回答。您的意思是,除非value\u from\u db
包含日期,否则它将始终输入else情况。是的。如果你想让它进入If,你应该在If中添加一个空值验证。我已经看到了不同的情况,其中空值有不同的处理方法,所以你永远不能信任空值。使用它的正确方法是显式检查它,或者设置一些约束以保证您永远不会收到它。在数据库和4GL上,检查NULL的正确语句是:为NULL
。重要提示:切勿使用相等的=NULL
这不起作用!对于PHP,您有这个函数
IF value_from_db IS NULL THEN
/* display date is unknown */
ELSIF value_from_db <= TODAY THEN
/* display date is in the past */
ELSE
/* display date is in the future */
END IF;
IF value_from_db <= TODAY THEN
/* display date is in the past */
ELSIF value_from_db > TODAY THEN
/* display date is in the future */
ELSE
/* display date must be null */
END IF