我正在使用Business Objects,它运行在Oracle SQL数据库之上.我没有访问PL或任何类型的SQL命令行,我没有对数据库的写访问权限.我只能将查询作为单个命令运行,需要输出一组已定义的列.
我可以从用户提示中获取数据,这些提示出现在SQL中:
@variable('Prompt1')
Run Code Online (Sandbox Code Playgroud)
例如我可以说:
SELECT
A.SomeDate
FROM
A
WHERE
A.SomeDate BETWEEN @variable('Start') AND @variable('End Date')
Run Code Online (Sandbox Code Playgroud)
这很容易.它运行; 请求用户输入一些日期; 然后返回它们之间的所有匹配(包括).
但问题是,用户将使用Business Objects的"Infoview"系统来运行查询,并且提示系统会显示日期选择器 - 默认情况下包括日期的时间部分("01/01/2016 12 :00:00 AM").
如果用户没有删除时间部分,如果SomeDate值超出所选时间,则可能导致错过记录.例如,如果我想获取今天的所有记录,那么我在技术上想要在00:00:00(午夜)和23:59:59之间的所有内容.
我真正希望能够在查询变量周围使用TRUNC,如下所示:
WHERE
A.SomeDate BETWEEN TRUNC(@variable('Start')) AND TRUNC(@variable('End Date'))
Run Code Online (Sandbox Code Playgroud)
...但是这会导致编译错误:"数据类型不一致:预期DATE得到NUMBER".我不知道为什么Oracle会在编译之前将提示视为数字数据类型.
有谁知道如何获取@variable值并将其转换为我能够截断为日期值的东西?
因此,我正试图找到解决这个问题的方法.我想到的一件事是,如果我可以使用提示变量并使用TO_DATE将其显式转换为日期
编辑:有人向我指出,TRUNC将无效,因为"12:00:00 AM"已经是午夜.所以我觉得我误解了TRUNC.似乎它将它截断到午夜:而我认为它只是完全删除了日期的时间部分,这意味着匹配将在00:00:00和23:59:59之间的任何时间返回.
我真正想要的是:如果SomeDate有一个时间部分,例如,11:03那么当结束日期提示只指定当天时,我如何确保包括它?
我在创建自己的CustomInfoWindow时遇到问题.在不知道何处和原因的情况下获得异
这是我简单的customInfoWindow类
public class CustomInfoWindow implements InfoWindowAdapter {
private LayoutInflater mInflater;
public CustomInfoWindow(LayoutInflater inflater) {
this.mInflater=inflater;
}
@Override
public View getInfoContents(Marker marker) {
View popup = mInflater.inflate(R.layout.info_window_layout, null);
TextView tv=(TextView)popup.findViewById(R.id.title);
tv.setText(marker.getTitle());
tv=(TextView)popup.findViewById(R.id.address);
tv.setText(marker.getSnippet());
return popup;
}
@Override
public View getInfoWindow(Marker marker) {
View popup = mInflater.inflate(R.layout.info_window_layout, null);
TextView tv=(TextView)popup.findViewById(R.id.title);
tv.setText(marker.getTitle());
tv=(TextView)popup.findViewById(R.id.address);
tv.setText(marker.getSnippet());
return popup;
}
Run Code Online (Sandbox Code Playgroud)
}
我在这里设置它.(主要活动)
mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
.getMap();
mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(
Statics.LAT_TLV, Statics.LON_TLV), 13));
CustomInfoWindow customInfoWindow = new CustomInfoWindow(getLayoutInflater());
mMap.setInfoWindowAdapter(customInfoWindow);
Run Code Online (Sandbox Code Playgroud)
我没有实现onMarkerClick方法.地图加载标记(约40),但当我点击其中一个标记时,我得到:
01-10 13:15:24.321: E/AndroidRuntime(21162): FATAL EXCEPTION: …Run Code Online (Sandbox Code Playgroud) 除了使用自定义SQL之外,如何限制WebI中查询返回的结果/行数?可能就像"前100名"记录.
我无法更改参数中的"限制结果大小",因为我不希望它影响任何其他报告.
先感谢您 :)