返回列表 发帖

MSSQL的SQL语句(日期时间)

笺注:这是在 使用Navicat远程管理MSSQL2014 的基础上进行的。


使用Navicat的查询编辑器:
图片1.png


在库data1中创建表t_1:
Use data1;

create table t_1 (id int primary key not null identity (1,1),name varchar(50),shijian1 datetime,shijian2 datetime)
图片2.png

效果:
图片3.png


表data1.dbo.t_1的表结构:
图片4.png
注释:字段id为主键、标识符列,会自动增长。



######

使用Navicat往表data1.dbo.t_1中一次性插入多条记录:(字段id为主键、标识符列,会自动增长,不用写)

Use data1;

insert into t_1 (name,shijian1,shijian2) values ('zhuohua','1987-1-9','1987-1-19');

insert into t_1 (name,shijian1,shijian2) values ('Python','1987-1-9','1987-4-18');

insert into t_1 (name,shijian1,shijian2) values ('Mary','2018-2-8 8:3:15','2019-3-6 12:30:6');

insert into t_1 (name,shijian1,shijian2) values ('Lily','2018-4-9 18:6:23','2000-06-16 22:03:15');



在查询编辑器里输出表data1.dbo.t_1中的所有记录:
SELECT * FROM data1.dbo.t_1;
图片5.png



只显示日期部分:(方式一)
Use data1;
SELECT CONVERT(VARCHAR(12),shijian1,111) AS date1,shijian2 FROM t_1;
图片6.png


只显示日期部分:(方式二)
Use data1;
SELECT CONVERT(VARCHAR(12),shijian1,23) AS date1,shijian2 FROM t_1;
图片7.png



只显示日期中的年:
Use data1;
SELECT name,YEAR(shijian2) AS yesar2 FROM t_1;
图片8.png


只显示日期中的月:
Use data1;
SELECT name,MONTH(shijian2) AS month2 FROM t_1;
图片9.png


只显示日期中的日:
Use data1;
SELECT name,DAY(shijian2) AS day2 FROM t_1;
图片10.png



查询两个日期之间的相隔天数:( 不足一天的话,返回的结果会是0 )
Use data1;
SELECT name,shijian1,shijian2,datediff(D,shijian1,shijian2) AS 相隔天数 FROM t_1;
图片11.png
注释:在datediff()函数里,如果第一个日期大于第二个日期,返回的结果会是负数。


查询两个日期之间的相隔月数:( 不足一个月的话,返回的结果会是0 )
Use data1;
SELECT name,shijian1,shijian2,datediff(M,shijian1,shijian2) AS 相隔月数 FROM t_1;
图片13.png
注释:在datediff()函数里,如果第一个日期大于第二个日期,返回的结果会是负数。


查询两个日期之间的相隔年数:( 不足一年的话,返回的结果会是0 )
Use data1;
SELECT name,shijian1,shijian2,datediff(YYYY,shijian1,shijian2) AS 相隔年数 FROM t_1;
图片14.png
注释:在datediff()函数里,如果第一个日期大于第二个日期,返回的结果会是负数。



显示两个日期之间相差超过2年的记录:
Use data1;
SELECT name,shijian1,shijian2 FROM t_1 WHERE datediff(YYYY,shijian1,shijian2) > 2
图片15.png

Use data1;
SELECT name,shijian1,shijian2 FROM t_1 WHERE  datediff(YYYY,shijian2,shijian1) > 2
图片16.png
注释:这种情况下,在datediff()函数里,第一个日期要小于第二个日期。





只显示时间部分:
Use data1;
SELECT CONVERT(VARCHAR(12),shijian1,8) AS time1,shijian2 FROM t_1;
图片17.png


只显示时间中的时:
Use data1;
SELECT name,dateName(hh,shijian1) AS hour1 FROM t_1;
图片18.png


只显示时间中的分:
Use data1;
SELECT name,dateName(N,shijian1) AS minute1 FROM t_1;
图片19.png


只显示时间中的秒:
Use data1;
SELECT name,dateName(S,shijian1) AS second1 FROM t_1;
图片20.png



查询两个时间之间的相隔小时数:( 不足一个小时的话,返回的结果会是0 )
Use data1;
SELECT name,shijian1,shijian2,datediff(HH,shijian1,shijian2) AS 相隔小时数 FROM t_1;
图片21.png
注释:在datediff()函数里,如果第一个时间大于第二个时间,返回的结果会是负数。


查询两个时间之间相差大于240个小时的记录:
Use data1;
SELECT name,shijian1,shijian2,datediff(HH,shijian1,shijian2) AS 相隔小时数 FROM t_1 WHERE datediff(HH,shijian1,shijian2) > 240;
图片22.png


查询两个时间之间相差大于或等于240个小时的记录:
Use data1;
SELECT name,shijian1,shijian2,datediff(HH,shijian1,shijian2) AS 相隔小时数 FROM t_1 WHERE datediff(HH,shijian1,shijian2) >= 240;
图片23.png


查询两个时间之间相差小于3个小时的记录:
Use data1;
SELECT name,shijian1,shijian2,datediff(HH,shijian1,shijian2) AS 相隔小时数 FROM t_1 WHERE datediff(HH,shijian1,shijian2) < 3;
图片24.png


查询两个时间之间相差小于或等于3个小时的记录:
Use data1;
SELECT name AS 姓名 FROM t_1 WHERE datediff(HH,shijian1,shijian2) <= 3;
图片25.png



查询两个时间之间的相隔分钟数:
Use data1;
SELECT name,shijian1,shijian2,datediff(N,shijian1,shijian2) AS 相隔分钟数 FROM t_1;
图片26.png
注释:在datediff()函数里,如果第一个时间大于第二个时间,返回的结果会是负数。


查询两个时间之间的相隔秒钟数:
Use data1;
SELECT name,shijian1,shijian2,datediff(S,shijian1,shijian2) AS 相隔秒钟数 FROM t_1;
图片27.png
注释:在datediff()函数里,如果第一个时间大于第二个时间,返回的结果会是负数。





给用户Lily的字段shijian2加大21年:
Use data1;
update t_1 set shijian2 = dateadd(YYYY,21,shijian2) WHERE name = 'Lily';

SELECT * FROM t_1;
图片28.png



给用户Lily的字段shijian2减小1年:
Use data1;
update t_1 set shijian2 = dateadd(YYYY,-1,shijian2) WHERE name = 'Lily';

SELECT * FROM t_1;
图片29.png



给用户Lily的字段shijian2加大2个月:
Use data1;
update t_1 set shijian2 = dateadd(M,2,shijian2) WHERE name = 'Lily';

SELECT * FROM t_1;
图片30.png



给用户Lily的字段shijian2加大3天:
Use data1;
update t_1 set shijian2 = dateadd(D,3,shijian2) WHERE name = 'Lily';

SELECT * FROM t_1;
图片31.png





给用户Lily的字段shijian2减小1小时:
Use data1;
update t_1 set shijian2 = dateadd(HH,-1,shijian2) WHERE name = 'Lily';

SELECT * FROM t_1;
图片32.png



给用户Lily的字段shijian2减小2分钟:
Use data1;
update t_1 set shijian2 = dateadd(N,-2,shijian2) WHERE name = 'Lily';

SELECT * FROM t_1;
图片33.png



给用户Lily的字段shijian2减小3秒钟:
Use data1;
update t_1 set shijian2 = dateadd(S,-3,shijian2) WHERE name = 'Lily';

SELECT * FROM t_1;
图片34.png





根据日期部分作为关键字进行查询:
Use data1;
SELECT * FROM t_1 WHERE CONVERT(VARCHAR(12),shijian1,23) = '1987-01-09';
图片1.png


Use data1;
SELECT name,CONVERT(VARCHAR(12),shijian1,23) AS date1 FROM t_1 WHERE CONVERT(VARCHAR(12),shijian1,23) = '1987-01-09';
图片2.png


Use data1;
SELECT name,CONVERT(VARCHAR(12),shijian1,23) AS date1 FROM t_1 WHERE CONVERT(VARCHAR(12),shijian1,23) LIKE '1987-01-%';
图片3.png


Use data1;
SELECT name,CONVERT(VARCHAR(12),shijian2,23) AS date2 FROM t_1 WHERE YEAR(shijian2) IN ('1987','2019');
图片4.png


Use data1;
SELECT name,CONVERT(VARCHAR(12),shijian2,23) AS date2 FROM t_1 WHERE YEAR(shijian2) BETWEEN '1987' AND '2019';
图片5.png





根据时间部分作为关键字进行查询:
Use data1;
SELECT * FROM t_1 WHERE CONVERT(VARCHAR(12),shijian1,8) = '08:03:15';
图片6.png


Use data1;
SELECT name,CONVERT(VARCHAR(12),shijian1,8) AS time1 FROM t_1 WHERE CONVERT(VARCHAR(12),shijian1,8) = '08:03:15';
图片7.png





相关文章:
MSSQL的SQL语句
Windows2008R2_安装MySQL5.5

dateutil.rrule()函数
Python3脚本管理MSSQL2014

返回列表