1、按条件进行sql数据存储
普通的 INSERT INTO 插入:
INSERT INTO card(cardno, cardnum) VALUES('1111', '100');
INSERT INTO card(cardno, cardnum) VALUES('2222', '200');
加入条件的插入sql
INSERT INTO card(cardno, cardnum) SELECT '111', '100' FROM DUAL WHERE NOT EXISTS(SELECT cardno FROM card WHERE cardno = '111');
INSERT INTO card(cardno, cardnum) SELECT '222', '200' FROM DUAL WHERE NOT EXISTS(SELECT cardno FROM card WHERE cardno = '222');
批量插入
<insert id="insertActiveMemberList" parameterType="java.util.List">
insert into sns_active_member ( actity_id, create_id, gmt_created,
gmt_modified,state) values
<foreach collection="list" item="item" index="index"
separator=",">
( #{item.actityId}, #{item.createId}, #{item.gmtCreated},
#{item.gmtModified}, #{item.state})
</foreach> </insert>
2、条件控制
IF 语句
CASE 语句
IF 语句根据条件执行一系列语句,有三种形式:IF-THEN、IF-THEN-ELSE 和 IF-THEN-ELSIF
DECLARE
x VARCHAR2(10);
BEGIN
x:='&x';
IF LOWER(x)='y' THEN
DBMS_OUTPUT.PUT_LINE('Yes!');
ELSIF LOWER(x)='n' THEN
DBMS_OUTPUT.PUT_LINE('No!');
ELSE
DBMS_OUTPUT.PUT_LINE('Error');
END IF;
END;
CASE 语句用于根据单个变量或表达式与多个值进行比较
执行 CASE 语句前,先计算选择器的值
BEGIN
CASE ‘&grade’
WHEN ’A’ THEN DBMS_OUTPUT.PUT_LINE (’优异’);
WHEN ’B’ THEN DBMS_OUTPUT.PUT_LINE (优秀’);
WHEN ’C’ THEN DBMS_OUTPUT.PUT_LINE (’良好’);
WHEN ’D’ THEN DBMS_OUTPUT.PUT_LINE (’一般’);
WHEN ’F’ THEN DBMS_OUTPUT.PUT_LINE (’较差’);
ELSE DBMS_OUTPUT.PUT_LINE (’没有此成绩’);
END CASE;
END;
3、循环控制用于重复执行一系列语句
循环控制语句包括:
LOOP、EXIT 和 EXIT WHEN
循环控制的三种类型:
LOOP - 无条件循环
WHILE - 根据条件循环
FOR - 循环固定的次数
LOOP
sequence_of_statements
END LOOP;
WHILE condition LOOP
sequence_of_statements
END LOOP;
FOR counter IN [REVERSE] value1..value2
LOOP
sequence_of_statements
END LOOP;
or 语句的使用 满足某条条件就能显示
select t2.content,t2.notes_id,t1.title,t1.create_date,t1.id from travel_notes t1,travel_notes_agenda t2,travel_notes_agenda_items t3 where t1.id = t2.notes_id
and t2.id = t3.notes_agenda_id
and(
t2.content LIKE CONCAT(CONCAT('%', #{content}), '%')
or
t1.title LIKE CONCAT(CONCAT('%', #{content}), '%')
or
t1.author LIKE CONCAT(CONCAT('%', #{content}), '%')
or
t3.name LIKE CONCAT(CONCAT('%', #{content}), '%'))
and
<![CDATA[ t1.create_date < #{createDate}]]>
order by t1.create_date desc
limit 0,#{page}
update
UPDATE travel_specialty t SET t.read_num = (t.read_num +1) WHERE id = 19
Date 计算
获取指定月份的前一个月的时间
select DATE_SUB('1998-01-30 15:20:30', Interval 1 month);
获取指定月份后一个月的时间
select DATE_ADD('1998-01-30 15:20:30', Interval 1 month);
获取当前月份的月初时间
select DATE_ADD(curdate(),interval -day(curdate())+1 day)
获取指定月份上个月的月初
select DATE_ADD((select DATE_SUB('1998-01-20 15:20:30', Interval 1 month)),interval -day((select DATE_SUB('1998-01-20 15:20:30', Interval 1 month)))+1 day)
获取指定月份下个月的月初
select DATE_ADD((select DATE_ADD('1998-01-30 15:20:30', Interval 1 month)),interval -day((select DATE_ADD('1998-01-30 15:20:30', Interval 1 month)))+1 day)
获取指定月份下个月的月末
select last_day((select DATE_ADD(‘1998-01-30 15:20:30’, Interval 1 month)))
获取上个月的第一天
select date_sub(date_sub(date_format(now(),'%y-%m-%d'),interval extract( day from now())-1 day),interval 1 month)
获取上个月的月末
select date_sub(date_sub(date_format(now(),'%y-%m-%d'),interval extract( day from now()) day),interval 0 month) as date
获取上个月月初的时间 格式为long (带秒数)
SELECT UNIX_TIMESTAMP(date_sub(date_sub(date_format(now(),'%y-%m-%d'),interval extract( day from now())-1 day),interval 1 month))* 1000
获取上个月月末的时间 格式为long
select UNIX_TIMESTAMP(date_sub(date_sub(date_format(now(),'%y-%m-%d'),interval extract( day from now()) day),interval 0 month))*1000
获取当前日期在本周的周一
select subdate(curdate(),date_format(curdate(),'%w')-1)
获取当前日期在本周的周日
select subdate(curdate(),date_format(curdate(),'%w')-7)