在Stack Overflow上搜索将表中的NULL值替换为0的方法时,我发现很多线程都指向使用COALESCE函数。例如。 postgresql return 0 if returned value is null
我理解COALESCE函数“替换”特定查询的空值;然而,桌子本身仍未受影响。也就是说,如果您在没有COALESCE的单独查询中再次查询该表,则仍然存在空值。
我的问题是,有没有办法让我在表中永久地用指定值(如0)替换NULL值,所以我不需要在每个查询中使用COALESCE?作为我的问题的扩展,修改原始表而不是在查询中进行操作被认为是不好的做法吗?
答案 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,如您所愿。也许你忘了更新。