Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 与4gl中的NULL值和日期进行比较_Php_Database_Date_Informix_4gl - Fatal编程技术网

Php 与4gl中的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既不大也不小 您应该

我有一个从数据库提交的值,它是informix中的一个日期。有时该值将为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