在PostgreSQL中用<some value =“”>替换我的表中的NULL

时间:2018-05-23 04:36:54

标签: sql postgresql null

在Stack Overflow上搜索将表中的NULL值替换为0的方法时,我发现很多线程都指向使用COALESCE函数。例如。 postgresql return 0 if returned value is null

我理解COALESCE函数“替换”特定查询的空值;然而,桌子本身仍未受影响。也就是说,如果您在没有COALESCE的单独查询中再次查询该表,则仍然存在空值。

我的问题是,有没有办法让我在表中永久地用指定值(如0)替换NULL值,所以我不需要在每个查询中使用COALESCE?作为我的问题的扩展,修改原始表而不是在查询中进行操作被认为是不好的做法吗?

2 个答案:

答案 0 :(得分:2)

你可以做一个更新:

UPDATE table SET col1 = 0 WHERE col1 IS NULL;

这应该有效地更新你桌面上的所有匹配记录

答案 1 :(得分:0)

我知道你得到了答案,但你也可以在你的进一步查询SELECT id ,nvl(col1, 0) FROM ... 函数中使用。您可以在运行时将NULL值替换为0,以确保您的查询按预期工作。

class ImageMagnifier2 extends AppCompatImageView {

public ImageMagnifier2(final Context context) {
    super(context);
    init();
}

@Override
public boolean dispatchTouchEvent(MotionEvent me) {
    // Call onTouchEvent of SimpleGestureFilterLongPress class
    return super.dispatchTouchEvent(me);
}

private void init() {
    setWillNotDraw(false);
    setLayerType(LAYER_TYPE_HARDWARE, null);

    zoomPos = new PointF(0, 0);
    matrix = new Matrix();
    paint = new Paint();
    paintBackground = new Paint();
    paint.setColor(getResources().getColor(android.R.color.transparent));
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT));
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if (!zooming) {
        buildDrawingCache();
    } else {
        bitmap = getDrawingCache();
        shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
        paint.setShader(shader);
        matrix.reset();
        matrix.postScale(2f, 2f, zoomPos.x, zoomPos.y);
        paint.getShader().setLocalMatrix(matrix);

        paintBackground.setColor(Color.parseColor("#F227aae0"));//F227aae0
        paintBackground.setStyle(Paint.Style.FILL);
        paintBackground.setAntiAlias(true);

        Rect rectangle = new Rect( 0, 0, canvas.getWidth(), canvas.getHeight()   );
        canvas.drawRect(rectangle,paintBackground);
        canvas.drawCircle(zoomPos.x, zoomPos.y, sizeOfMagnifier - 5, paint);
    }
   }

它没有在表中更新,但您确定所有NULL值都显示为0,如您所愿。也许你忘了更新。