Oracle中参数中具有空值的结果

时间:2019-04-19 06:08:41

标签: sql oracle oracle10g

我正在为往返日期创建一个参数。记录中的某些日期丢失,这意味着存在空值。当我的参数在两个值之间搜索时,它避免了那些日期为空的结果,但我也想获得这些记录。

示例代码为

AND TO_DATE(PLLA.PROMISED_DATE) 
    BETWEEN NVL (to_char(to_date(substr(:PROMISED_DATE_FROM, 1, 20), 'YYYY/MM/DD'), 'DD-MON-YY'), TO_DATE(PLLA.PROMISED_DATE)) 
        AND NVL (to_char(to_date(substr(:PROMISED_DATE_to, 1, 20), 'YYYY/MM/DD'), 'DD-MON-YY'), TO_DATE(PLLA.PROMISED_DATE)) 

2 个答案:

答案 0 :(得分:0)

也将nvl条件添加到PLLA.PROMISED_DATE ...并尝试您的代码...

答案 1 :(得分:0)

如果要包括PLLA.PROMISED_DATE为null的记录,则只需在WHERE子句中包括该条件:

import produce from 'immer';
import storage from 'redux-persist/lib/storage';
import { persistReducer } from 'redux-persist';
import {
LOGIN_REQUEST,
LOGIN_SUCCESS,
LOGIN_FAILURE,
} from './authentication.constant';

const initialState = Object.freeze({
isLoginInProgress: false,
loginData: {},
loginError: {},
});

const persistConfig = {
key: 'auth',
storage,
blacklist: ['loginError'],
};

function AuthReducer(state = initialState, action) {
return produce(state, (draft) => {
    switch (action.type) {
    case LOGIN_REQUEST: {
        draft.isLoginInProgress = true;
        draft.loginData = {};
        draft.loginError = {};
        break;
    }
    case LOGIN_SUCCESS: {
        draft.isLoginInProgress = false;
        draft.loginData = action.payload;
        draft.loginError = {};
        break;
    }
    case LOGIN_FAILURE: {
        draft.isLoginInProgress = false;
        draft.loginData = {};
        draft.loginError = action.payload;
        break;
    }
    default: {
        break;
    }
    }

    return draft;
});
}

export default persistReducer(persistConfig, AuthReducer);

您发布的示例代码确实很难理解。 const appReducer = combineReducers({ auth, }); AND ( PLLA.PROMISED_DATE is null or TO_DATE(PLLA.PROMISED_DATE) BETWEEN NVL (to_char(to_date(substr(:PROMISED_DATE_FROM,1,20),'YYYY/MM/DD'),'DD-MON-YY'),TO_DATE(PLLA.PROMISED_DATE)) and NVL (to_char(to_date(substr(:PROMISED_DATE_to,1,20),'YYYY/MM/DD'),'DD-MON-YY'),TO_DATE(PLLA.PROMISED_DATE)) ) 的切换始终是一个危险信号。最好将:PROMISED_DATE_FROM和:PROMISED_DATE_TO作为实际日期传递。但是,如果将它们作为字符串传递,那么to_char()的需求是什么?并且,如果传递的参数确实包含多余的字符,为什么子字符串不长10个字符,即您在to_date()中使用的日期掩码的长度?

此外,为什么在将substr()应用于PLLA.PROMISED_DATE时又将参数翻转回字符串?如果该列不是日期数据类型,但至少需要确保您在to_date()运算符的两边都比较相同的数据类型,这将是很糟糕的表现。