我的脚本中的CASE部分有问题(第三个$查询)。我正在创建过滤器,用于过滤轮班之间的间隔。我不知道这个问题。我做错了什么?
} elseif ($this->shift == DeliveryItem::SECOND_SHIFT) { //druga zmiana
$query->andFilterWhere(['>=', "(cast(to_char(".Production::tableName().'."created_at"'.", 'HH') as int))" , DeliveryItem::SECOND_SHIFT_START_HOUR]);
$query->andFilterWhere(['<', "(cast(to_char(".Production::tableName().'."created_at"'.", 'HH') as int))" , DeliveryItem::SECOND_SHIFT_END_HOUR]);
$query->andFilterWhere(['<=', "
(
CASE
cast(to_char(".Production::tableName().'."created_at"'.", 'HH') as int)
WHEN
".DeliveryItem::SECOND_SHIFT_END_HOUR."
THEN (cast(to_char(".Production::tableName().'."created_at"'.", 'MI') as int))
ELSE -1
)
"
, DeliveryItem::SECOND_SHIFT_END_MINUTE]);
我也尝试过另一种方式:
$query->andWhere("
CASE
cast(to_char(".Production::tableName().'."created_at"'.", 'HH') as int)
WHEN
".DeliveryItem::SECOND_SHIFT_END_HOUR."
THEN
((cast(to_char(".Production::tableName().'."created_at"'.", 'MI') as int)) <= ".DeliveryItem::SECOND_SHIFT_END_MINUTE. ")");
它的工作方式如下:如果rows_at属于某个时间间隔,而DeliveryItem::SECOND_SHIFT_END_HOUR
== rows created_at hour,则将DeliveryItem::SECOND_SHIFT_END_MINUTE
与rows_created_at分钟进行比较,并对其进行过滤。
此致