我的表格包含以下数据:
Id | Start | End | Used
----------------------------------------
1 | 27-04-17 2:00 |27-04-17 0:00 | 1:30
---------------------------------------
2 | 27-04-17 2:00 |27-04-17 0:00 | 23:00
---------------------------------------
3 | 27-04-17 2:00 |27-04-17 0:00 | 1:00
---------------------------------------
4 | 28-04-17 2:00 |28-04-17 0:00 | 0:30
---------------------------------------
5 | 30-04-17 2:00 |30-04-17 0:00 | 3:30
---------------------------------------
我想将其设置为
Id | Start | End | Used
----------------------------------------
1 | 27-04-17 2:00 |27-04-17 3:30 | 1:30
---------------------------------------
2 | 27-04-17 3:30 |28-04-17 2:30 | 23:00
---------------------------------------
3 | 28-04-17 2:30 |28-04-17 3:30 | 1:00
---------------------------------------
4 | 28-04-17 3:30 |28-04-17 4:00 | 0:30
---------------------------------------
5 | 30-04-17 2:00 |30-04-17 4:30 | 2:30
---------------------------------------
我想将前一个id的结束时间设置为下一个id的开始时间,其中第一个id的开始时间由用户设置。
结束时间是开始时间和使用时间的总和我使用vb。数据库的净数据表和SQL服务器。
要在第一行设置值,我使用SQL函数DATEADD(),通过它添加两个小时,并在结束日期添加时间相同的函数。
我想复制下一行中前一行的结束日期,以便整个计算正常工作。
我可以通过SQL进行吗?或者我需要一个函数来在Vb.net数据表中执行它,它将用于报告。
注意:ID序列可以更改
感谢您的帮助。
答案 0 :(得分:0)
下面的递归CTE逻辑将为您提供所需的输出。
String s = "x = 123 & y = abc & dateFrom >= 1234500000 & dateTo <= 654870000";
Pattern pattern = Pattern.compile("(\\d+)");
Matcher matcher = pattern.matcher(s);
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
long min = 200;
Map<String, String> map = new HashMap<>();
while(matcher.find()) {
String longStr = matcher.group();
long l = Long.valueOf(longStr);
if(l > min) {
String dateStr = sdf.format(new Date(l));
map.put(longStr, dateStr);
System.out.println("Replace " + longStr + " with " + dateStr);
}
}
for (Map.Entry<String, String> entry : map.entrySet()) {
s = s.replaceAll(entry.getKey(), entry.getValue());
}
System.out.println(s);