簡體   English   中英

Postgres運算符邏輯不起作用?

[英]Postgres operator logic not working?

無法為我的生活弄清楚為什么我要重新獲得這一行

 order_id | job_name | memname |     status     |  state
----------+----------+---------+----------------+----------
 0e4ba    | pwd_test |         | Wait Condition | Deleted

運行此查詢

select order_id, job_name, memname, status, state 
from a150708002_ajob 
where order_time < '20150601' 
  and status != 'Ended OK' 
   or state != 'Deleted' 
  and order_time < '20150601';

總結果:

em800=> select order_id, job_name, memname, status, state from a150708002_ajob where order_time < '20150601' and status != 'Ended OK' or state != 'Deleted' and order_time < '20150601';
 order_id | job_name | memname |     status     |  state
----------+----------+---------+----------------+----------
 0e4ba    | pwd_test |         | Wait Condition | Deleted
 0eevd    | DBPE220A |         | Wait Condition | Held
 0eeve    | SHAW     |         | Wait Condition | Held

不知道發生了什么事?

更新:

嘗試了以下仍然沒有成功

em800=> select order_id, job_name, memname, status, state from a150708002_ajob where order_time < '20150601' and not (status = 'Ended OK' or state = 'Deleted');
 order_id | job_name | memname |     status     |  state
----------+----------+---------+----------------+----------
 0e4ba    | pwd_test |         | Wait Condition | Deleted
 0eevd    | DBPE220A |         | Wait Condition | Held
 0eeve    | SHAW     |         | Wait Condition | Held
(3 rows)

表架構:

                 Table "public.a150701002_aevt"
        Column        |            Type             | Modifiers
----------------------+-----------------------------+-----------
 evt_no               | integer                     | not null
 evt_time             | timestamp without time zone | not null
 evt_type             | character varying(1)        | not null
 new_value            | integer                     |
 old_value            | integer                     |
 order_id             | character varying(5)        |
 state_digits_new_ffu | character varying(15)       |
 state_digits_old_ffu | character varying(15)       |
Indexes:
    "pk_a150701002_aevt_0" PRIMARY KEY, btree (evt_no)
 task_class               | character varying(3)    |
 ind_cyclic               | character varying(1)    |
 reten_days               | character varying(3)    |
 reten_gen                | character varying(2)    |
 order_table              | character varying(770)  |
 order_lib                | character varying(44)   |
 sticky_ind               | character varying(1)    |
 seq_cnt_added            | integer                 |
 short_ffu                | character varying(12)   |
 dsect_ffu                | character varying(100)  |
 isn_                     | integer                 | not null
 time_ref                 | character varying(1)    |
 time_zone                | character varying(9)    |
 appl_type                | character varying(10)   |
 appl_ver                 | character varying(10)   |
 appl_form                | character varying(30)   |
 cm_ver                   | character varying(10)   |
 state_mask               | character varying(9)    |
 multy_agent              | character varying(1)    |
 schedule_env             | character varying(16)   |
 sys_affinity             | character varying(5)    |
 req_nje_node             | character varying(8)    |
 adjust_cond              | character varying(1)    |
 in_service               | character varying(255)  |
 stat_cal                 | character varying(30)   |
 stat_period              | character varying(1)    |
 instream_jcl             | text                    |
 use_instream_jcl         | character varying(1)    |
 lpar                     | character varying(8)    |
 due_out_daysoffset       | character varying(3)    |
 from_daysoffset          | character varying(3)    |
 to_daysoffset            | character varying(3)    |
 order_time               | character varying(14)   |
 avg_start_time           | character varying(6)    |
 cpu_time                 | integer                 |
 em_stat_cal_ctm          | character varying(20)   |
 em_stat_cal              | character varying(30)   |
 em_stat_period           | character varying(1)    |
 interval_sequence        | character varying(4000) |
 specific_times           | character varying(4000) |
 tolerance                | integer                 |
 cyclic_type              | character varying(1)    |
 current_run              | integer                 |
 elapsed_runtime          | integer                 |
 workloads                | character varying(525)  |
 def_nodegroup            | character varying(50)   |
 nodegroup_set_by         | character varying(1)    |
 failure_rc               | character varying(5)    |
 failure_rc_step          | character varying(8)    |
 failure_rc_procstep      | character varying(8)    |
 highest_rc               | character varying(5)    |
 highest_rc_step          | character varying(8)    |
 highest_rc_procstep      | character varying(8)    |
 highest_rc_memname       | character varying(8)    |
 associated_rbc           | character varying(20)   |
 cm_status                | character varying(32)   |
 depend_service_in        | character varying(1)    |
 depend_service_out       | character varying(1)    |
 em_stat_detail_data      | character varying(1500) |
 prev_odate_rerun_counter | integer                 |
 jobrc                    | character varying(5)    |

回應Norbert van Nobelen的回答

em800=> select order_id, status, state from a150712002_ajob where order_time < '20150615' and (status != 'Ended OK' or state != 'Deleted') and order_time < '20150615';
 order_id |     status     |  state
----------+----------------+----------
 0eevd    | Wait Condition | Deleted
 0eeve    | Wait Condition | Held
(2 rows)

回答:

事實證明邏輯很好,只是單元格內的值有尾隨空白

ctmtest1-tctmsv80 [13] python del_jobs_main.py 20150625 150712
select order_id, status, state from a150712002_ajob where order_time < '20150625' and not (status = 'Ended OK' or state = 'Deleted');
' order_id |     status     |  state   '
'----------+----------------+----------'
' 0eeve    | Wait Condition | Deleted '
' 0eevd    | Wait Condition | Deleted '
'(2 rows)'

所以我只是在查詢中添加了尾隨空格字符。 多謝你們 :)

在狀態檢查中缺少一些括號:

select order_id, job_name, memname, status, state from a150708002_ajob 
where order_time < '20150601' and 
(status != 'Ended OK' or state != 'Deleted') and order_time < '20150601';

方括號確定如何評估OR。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM