inner join ,left join ,right join 以及java时间转换
1.inner join ,left join 与 right join (from 百度知道)
例表a
aid adate
1 a1
2 a2
3 a3
表b
bid bdate
1 b1
2 b2
4 b4
(1)两个表a,b相连接,要取出id相同的字段
select * from a inner join b on a.aid = b.bid
此时的取出的是:
1 a1 b1
2 a2 b2
(2)left join 指:
select * from a left join b on a.aid = b.bid
首先取出a表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
2 a2 b2
3 a3 空字符
(3)right join是指:
指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
2 a2 b2
4 空字符 b4
2.时间类型以及java时间转换
时间类型: CST 和 GMT 时间的区别
GMT(Greenwich Mean Time)代表格林尼治标准时间
而CST却同时可以代表如下 4 个不同的时区:
- Central Standard Time (USA) UT-6:00
- Central Standard Time (Australia) UT+9:30
- China Standard Time UT+8:00
- Cuba Standard Time UT-4:00
以后的编程中为了避免错误,还是不要使用CST时间,而尽量采用GMT时间。
时间转化:(来源:http://yunnick.iteye.com/blog/1074495)
(1)String 与 date 转换: String -> date
String dateStr = "2010/05/04 12:34:23"; Date date = new Date(); //注意format的格式要与日期String的格式相匹配 DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); try { date = sdf.parse(dateStr); System.out.println(date.toString()); } catch (Exception e) { e.printStackTrace(); }
Date -> String (日期向字符串转换,可以设置任意的转换格式format)
String dateStr = ""; Date date = new Date(); //format的格式可以任意 DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); DateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH/mm/ss"); try { dateStr = sdf.format(date); System.out.println(dateStr); dateStr = sdf2.format(date); System.out.println(dateStr); } catch (Exception e) { e.printStackTrace(); }
(2)String 与 TimeStamp
String -> TimeStamp (String的类型必须形如: yyyy-mm-dd hh:mm:ss[.f...] 这样的格式,中括号表示可选,否则报错!!! 如果String为其他格式,可考虑重新解析下字符串,再重组
)
Timestamp ts = new Timestamp(System.currentTimeMillis()); String tsStr = "2011-05-09 11:49:45"; try { ts = Timestamp.valueOf(tsStr); System.out.println(ts); } catch (Exception e) { e.printStackTrace(); }
TimeStamp -> String (方法一的优势在于可以灵活的设置字符串的形式。)
Timestamp ts = new Timestamp(System.currentTimeMillis()); String tsStr = ""; DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); try { //方法一 tsStr = sdf.format(ts); System.out.println(tsStr); //方法二 tsStr = ts.toString(); System.out.println(tsStr); } catch (Exception e) { e.printStackTrace(); }
(3)Date 与 TimeStamp (两者是父子关系)
Date -> TimeStamp
Timestamp ts = new Timestamp(System.currentTimeMillis()); Date date = new Date(); try { date = ts; System.out.println(date); } catch (Exception e) { e.printStackTrace(); }
date对象指向的实体却是一个Timestamp,即date拥有Date类的方法,但被覆盖的方法的执行实体在Timestamp中
TimeStamp -> Date
父类不能直接向子类转化,可借助中间的String~~~~
注:使用以下方式更简洁
Timestamp ts = new Timestamp(date.getTime());
(4)Long 与 Date转换
Date -> Long
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); long timeStart=sdf.parse("2011-09-20 12:30:45").getTime(); //或者 long timeStart = new Date().getTime();
Long -> Date
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(timeStart); System.out.println(sdf.format(date));
(5) Calendar和Date的转化
(1) Calendar转化为Date
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();
(2) Date转化为Calendar
Date date=new Date();
Calendar cal=Calendar.getInstance();
cal.setTime(date);
3.部分知识:
(1)js验证输入小数(最高两位小数)
var pattern =/^[0-9]+([.]\d{1,2})?$/; objs[i].focus(); return false;
(2)js替换除字母数字之外的字符,可判断是否有特殊字符
var newStr = str.replace(/\W|_/g, "") \W表示除字母数字下划线之外的字符 /g表示全局,也就是说不会替换一次之后就停止。
(3)正则表达式部分基本知识:
\d [0-9] 匹配数字
\D [^0-9] 匹配非数字字符
\s [ \n\r\t\f\x0B] 匹配一个空白字符
\S [^ \n\r\t\f\x0B] 匹配一个非空白字符
\w [a-zA-Z0-9_] 匹配字母数字和下划线
\W [^a-zA-Z0-9_] 匹配除字母数字下划线之外的字符
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。刘, "o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。