Postgresql:仅在填充了多个列时选择

时间:2017-04-28 09:37:02

标签: postgresql

这些是名为st:

的表中的列名
st4stat
st8stat
st1stat
st11stat
st6stat
st10stat
st2stat
st7stat
st12stat

只有当这些列中的多个列不为空时,我才需要选择(选择它们的值)。 我不能说任何可能的组合。这有什么快捷的方法吗?

2 个答案:

答案 0 :(得分:1)

将每个测试转换为整数:

export function getIdByName(name) {
    console.log('getIdByName Thunk Action')

    return dispatch => {
        const FIELD = '/characters'
        let encodedName = encodeURIComponent(name.trim());
        let searchUrl = ROOT_URL + FIELD + '?ts=' + TS + '&apikey=' + PUBLIC_KEY + '&hash=' + HASH + '&name=' + encodedName;

        return axios.get(searchUrl)
            .then(result => {
                console.log('test 151', result)
                dispatch({
                    type: GET_ID_BY_NAME_SUCCESS,
                    payload: result
                })
                return result.data ; // add this <=============
            })            
    }
}

答案 1 :(得分:0)

在没有创建功能(或几个)的情况下,我不知道任何好的方法,但有一些不那么漂亮的方法。

你可以用丑陋的

来做
SELECT * from ROW
  WHERE (CASE WHEN col2 is null THEN 0 ELSE 1 END +
    CASE WHEN col2 is null THEN 0 ELSE 1 END +
    CASE WHEN col3 is null THEN 0 ELSE 1 END +
    ...) > 1;

如果列具有相同的数据类型,我们也可以更好地使用数组:

SELECT * from ROW
  WHERE array_length(array_remove(ARRAY[col1, col2, col3, col4, ...], NULL), 1) > 1;

这会生成一个列值数组,然后删除所有NULL,如果数组中还有多个值,则打印该行。

如果列有不同的类型,那么我们可以使用IS NULL来获取布尔值并执行相同的操作:

SELECT * from ROW
  WHERE array_length(array_remove(ARRAY[col1 IS NULL, col2 IS NULL, col3 IS NULL, col4 IS NULL, ...], true), 1) > 1;