01741:非法的零长度标识符

jm81lzqq  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(893)

我的模式中有一个视图列出了员工信息。
我想从这两个字段计算退休日期:出生日期和退休年龄。
使用 RETIRE_DATE 我想查询某个时期退休的员工。
运行查询时出错
ora-01741:非法的零长度标识符
我想是因为我用的是 RETIRE_DATE 作为查询中我的视图的一列。我该怎么纠正这个问题?
这是我的密码:

$start_period = strtotime("-100 week");
    $stop_period = strtotime("+100 week");

    $query = StaffEmploymentListView::find()
        ->SELECT([
          'PAYROLL_NO', 
          'BIRTH_DATE',
          'RETIRE_AGE',
          "ADD_MONTHS(BIRTH_DATE, RETIRE_AGE * 12) AS RETIRE_DATE"]);

    $query->andFilterWhere(['>=',$this->RETIRE_DATE, $start_period])
            ->andFilterWhere(['<=', $this->RETIRE_DATE, $stop_period])
            ->all();

我的table如下所示:

fafcakar

fafcakar1#

以下是有关错误的一些信息:
ora-01741:非法的零长度标识符
原因:试图使用两个双引号(“”)作为标识符。标识符必须至少有一个字符长。
您的查询在引用元素的方式上有问题。我用oci\u connect和oci\u execute做了一个测试,没有问题。
也许您需要如下重写它,或者对所有元素使用相同的引号。在你的例子中,你引用了一些带有 ' ,最后一部分 " ```

zlhcx6iw

zlhcx6iw2#

问题出在代码的这一部分

$query->andFilterWhere(['>=',$this->RETIRE_DATE, $start_period])
    ->andFilterWhere(['<=', $this->RETIRE_DATE, $stop_period])
    ->all();

如果你这么说的话 $this->RETIRE_DATE 评估和 RETIRE_DATE 属性。因为属性是空的,所以结果条件类似于 "" >= $start_period .
你可能想要的条件是这样的 RETIRE_DATE >= $start_period . 要做到这一点,你必须通过考试 RETIRE_DATE 进入 andFilterWhere 作为字符串而不是传递 RETIRE_DATE 财产。

$query->andFilterWhere(['>=', 'RETIRE_DATE', $start_period])
    ->andFilterWhere(['<=', 'RETIRE_DATE', $stop_period])
    ->all();

相关问题