River学习sql
1.获取当前系统时间
MySql中
NOW(),SYSDATE(),CURRENT_TIMESTAMP();--日期+时间
CURDATE(),CURRENT_DATE();--只有日期部分,不含时间
CURTIME(),CURRENT_TIME();--只有时间部分
Oracle中
SELECT SYSTIMESTAMP FROM DUAL;
SELECT SYSDATE FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM DUAL;--日期部分
SELECT TO_CHAR(SYSDATE, 'HH24:MI:SS') FROM DUAL;--时间部分
SqlServer中
参考:https://www.cnblogs.com/spring_wang/p/4748124.html
select getdate();--当前系统日期、时间
select dateadd(day,2,'2019-10-15'); --返回:2019-10-17 00:00:00.000
select datediff(day,'2019-09-01','2019-09-18'); --返回:17
select datename(weekday, '2004-10-15'); --返回:星期五
select 当前日期=convert(varchar(10),getdate(),120),当前时间=convert(varchar(8),getdate(),114);
select datename(dw,'2004-10-15');
select 本年第多少周=datename(week,'2004-10-15'), 今天是周几=datename(weekday,'2004-10-15');
2.比较时间大小
比较字符串类型的时间大小
数据库中的时间是varchar类型的,MySql使用CURDATE()来获取当前日期,SqlServer通过GETDATE()来获取当前日期
1.直接使用字符串来比较
注意:要保证两个数据的类型完全相同,否则异常
比如A:“2016-09-01”,如果B数据是:“2016-9-2”,那么无法进行比较
2.通过类型转换函数convert()
注意:要保证字符串的时间值正确,否则异常,
比如“2016-2-30”,2月没有30号,所以在转换的时候就会异常
CONVERT (<data_ type>[ length ], <expression> [, style])
1)data_type为SQL Server系统定义的数据类型,用户自定义的数据类型不能在此使用。
2)length用于指定数据的长度,缺省值为30。
3)用CONVERT() 函数的style 选项能以不同的格式显示日期和时间。style 是将DATATIME 和SMALLDATETIME 数据转换为字符串时
所选用的由SQL Server 系统提供的转换样式编号,不同的样式编号有不同的输出格式。如果用这种方法来判断某一个字段的话,
则存入的日期字段的字符串格式只要是能让sql server完成对日期的转换就可以了,而不一定要像第一种方法中的那样严格。
还是说adddate字段,比如要比较它是否大于当前的日期,就可以这样写:
where (convert(varchar, adddate) >= convert(varchar, getdate()))
select convert(varchar(10),getdate(),120); --获取当前日期
select convert(date,getdate(),110);--获取当前日期
select convert(datetime,getdate(),110); --获取当前时间日期
select convert(varchar(50),getdate(),108); --获取当前时刻
我的应用场景:
select * from table where (select curdate())< updateDate and updateDate is not null;
3.Sql 查询当天、本周、本月记录
查询当天:
select * from info where DateDiff(dd,datetime,getdate())=0;
查询24小时内的:
select * from info where DateDiff(hh,datetime,getDate())<=24;
查询本月:
select * from info where DateDiff(month,datetime,getdate())=0
查询本周:
select * from info where DateDiff(week,datetime,getDate())=0;
查询本年:
select * from info where DateDiff(year,datetime,getDate())=0;
4.批量InsertOrUpdate(mybatis中写法)
MySql
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aas.qd.qmap.business.dao.NowUserMapper">
<insert id="insertOrUpdate" parameterType="com.aas.qd.qmap.business.model.TiNowAuthor">
INSERT INTO ti_now_author
(user_id, user_nickname, user_name, gender, register_time, user_province_id, user_province, user_city_id,
user_city,
is_fellow, is_employee, attention_number, fans_number, identity, vin, fellow_name, fellow_mobile, is_eff,
first_load_dt, last_updt_dt, load_job, load_from, remark, batch_id)
values
<foreach collection="list" item="info" separator=",">
(#{info.user_id},#{info.user_nickname,jdbcType=VARCHAR},#{info.user_name,jdbcType=VARCHAR},#{info.gender,jdbcType=VARCHAR}
,#{info.register_time,jdbcType=TIMESTAMP},#{info.user_province_id,jdbcType=INTEGER},#{info.user_province,jdbcType=VARCHAR}
,#{info.user_city_id,jdbcType=INTEGER},#{info.user_city,jdbcType=VARCHAR},#{info.is_fellow,jdbcType=TINYINT}
,#{info.is_employee,jdbcType=TINYINT},#{info.attention_number,jdbcType=INTEGER},#{info.fans_number,jdbcType=INTEGER}
,#{info.identity,jdbcType=VARCHAR},#{info.vin,jdbcType=VARCHAR},#{info.fellow_name,jdbcType=VARCHAR},#{info.fellow_mobile,jdbcType=VARCHAR}
,#{info.is_eff,jdbcType=TINYINT},current_timestamp,current_timestamp
,#{info.load_job,jdbcType=VARCHAR},#{info.load_from,jdbcType=VARCHAR},#{info.remark,jdbcType=VARCHAR},#{info.batch_id})
</foreach>
ON DUPLICATE KEY UPDATE
user_nickname=VALUES(user_nickname),user_name=VALUES(user_name), gender=VALUES(gender),
register_time=VALUES(register_time), user_province_id=VALUES(user_province_id),
user_province=VALUES(user_province),
user_city_id=VALUES(user_city_id), user_city=VALUES(user_city), is_fellow=VALUES(is_fellow),
is_employee=VALUES(is_employee), attention_number=VALUES(attention_number), fans_number=VALUES(fans_number),
identity=VALUES(identity), vin=VALUES(vin), fellow_name=VALUES(fellow_name),
fellow_mobile=VALUES(fellow_mobile),
is_eff=VALUES(is_eff), last_updt_dt=current_timestamp,
load_job=VALUES(load_job), load_from=VALUES(load_from), remark=VALUES(remark), batch_id=VALUES(batch_id)
</insert>
</mapper>
SqlServer
--待补充
5.修改表名
MySql
RENAME TABLE TT_DOWNSTREAM_API TO TT_APP_INFO;
SqlServer
EXEC sp_rename 'TT_DOWNSTREAM_API', 'TT_APP_INFO';