表行具有开始时间列和结束时间列。我正在搜索时间在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();
}
}
}
答案 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日期,它也必须完全扫描表。