选择时间跨度涵盖特定时间的所有行

时间:2019-05-30 19:08:01

标签: oracle time

表行具有开始时间列和结束时间列。我正在搜索时间在3pm到4pm之间的任何行。换句话说,如果包含以下任一行,则应包括该行:(1)其开始和结束都在3到4之间,(2)在3之前开始,在4之后结束,(3)在3之前开始,在3之后结束,( 4)它开始于4之前,结束于4之后。我尝试添加以下where子句来覆盖这4个选项,并且可以正常工作,但是需要很长时间。似乎必须为此提供更好的代码。

public class FullDegreeActivity extends AppCompatActivity {

SceneView sceneView;
Scene scene;
Node node;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_full_degree);
    inIt();
    renderObject();
}

private void inIt() {
    sceneView = findViewById(R.id.scene_view);
    scene = sceneView.getScene();
}

private void renderObject() {
    ModelRenderable.builder().setSource(this, Uri.parse("edited.sfb"))
            .build().thenAccept(modelRenderable -> {
                addNodeToScene(modelRenderable);
            }
    ).exceptionally(throwable -> {

        return null;
    });
}

private void addNodeToScene(ModelRenderable renderable) {
    node = new Node();
    node.setParent(scene);
    node.setLocalPosition(new Vector3(0f, 0f, -1f));
    node.setLocalScale(new Vector3(1f, 1f, 1f));
    node.setName("Dog");
    node.setRenderable(renderable);
    TransformableNode transformableNode = new TransformableNode(sceneView.getTransformationSystem());
    transformableNode.setParent(node);
    transformableNode.setLocalRotation(Quaternion.axisAngle(new Vector3(1f, 0, 0), 0f));
    transformableNode.setRenderable(renderable);
    transformableNode.select();
    scene.addChild(transformableNode);
}

@Override
protected void onPause() {
    super.onPause();
    sceneView.pause();
}

@Override
protected void onResume() {
    super.onResume();
    try {
        sceneView.resume();
    } catch (CameraNotAvailableException e) {
        e.printStackTrace();
    }
}
}

1 个答案:

答案 0 :(得分:0)

在oracle中,与通用时间打交道可能有点麻烦(与特定日期的特定时间相反)。 方法通常是可以的,但是我认为可以通过稍微改变一下来简化它。 基本上,您想要每个与3-4小时重叠的时间,是吗? 嗯,那不是在3之前结束,或在4之后开始的东西(假设“ out”总是在“ in”之后)

Where 
NOT (TO_CHAR(vltecl.Patient_in_ROOM_DTTM, 'HH24:MI:SS')                  > '16:00:00'
    OR TO_CHAR(vltecl.Patient_OUT_ROOM_DTTM, 'HH24:MI:SS')                 < '15:00:00'
    )

我认为可以(目前无法进行测试)

如果您在此处处理大量数据,这可能仍然很慢-即使索引了In / Out日期,它也必须完全扫描表。