我的模式中有一个视图列出了员工信息。
我想从这两个字段计算退休日期:出生日期和退休年龄。
使用 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如下所示:
2条答案
按热度按时间fafcakar1#
以下是有关错误的一些信息:
ora-01741:非法的零长度标识符
原因:试图使用两个双引号(“”)作为标识符。标识符必须至少有一个字符长。
您的查询在引用元素的方式上有问题。我用oci\u connect和oci\u execute做了一个测试,没有问题。
也许您需要如下重写它,或者对所有元素使用相同的引号。在你的例子中,你引用了一些带有
'
,最后一部分"
```zlhcx6iw2#
问题出在代码的这一部分
如果你这么说的话
$this->RETIRE_DATE
评估和RETIRE_DATE
属性。因为属性是空的,所以结果条件类似于"" >= $start_period
.你可能想要的条件是这样的
RETIRE_DATE >= $start_period
. 要做到这一点,你必须通过考试RETIRE_DATE
进入andFilterWhere
作为字符串而不是传递RETIRE_DATE
财产。