SQL语句有点小小问题
发布网友
发布时间:2022-04-07 19:49
我来回答
共3个回答
热心网友
时间:2022-04-07 21:19
简单说几天内过生日的记录,比较的是月年日并要考虑跨年跨月的情况我写过一个过程这不是一个小问题,你得加分了
找出连续几天内过生日的人(MSSqlServer)
create table userinfo
(
Id int,
NickName nvarchar(15),
Age int,
Sex bit,
QQ nvarchar(15),
Birthday datetime,
Email nvarchar(15),
MobilePhone nvarchar(15),
Address nvarchar(15),
HomeTown nvarchar(15)
)
go
CREATE PROC PRO_BIRTHDAY
@DAYCOUNT INT --语句中包含的天数这是一个带参数的存储存过程
AS
DECLARE @CONDITION VARCHAR(1000)--用来拼接where后的条件
DECLARE @I INT--用来控制循环次的的变量
DECLARE @STRSQL VARCHAR(5000)--最后用来执行查询的语句
SET @STRSQL='SELECT * FROM USERINFO WHERE '--查询语句的开始部分
SET @CONDITION=+' CONVERT(VARCHAR(5),BIRTHDAY,110)='+CHAR(39)+ CONVERT(VARCHAR(5),GETDATE(),110) +CHAR(39) --当参数就于等于1时只拼接一天
SET @I=1
WHILE @I<@DAYCOUNT--这里循环只执行一参数减1那么多次因为这里用的是<号
BEGIN
SET @CONDITION=@CONDITION +' OR CONVERT(VARCHAR(5),BIRTHDAY,110)='+CHAR(39)+ CONVERT(VARCHAR(5),GETDATE()+@I,110)+CHAR(39)
SET @I=@I+1--每次加一用来改变所加的天数和控制循环
END
SET @STRSQL=@STRSQL+@CONDITION--把语句和条件拼在一起
--PRINT @STRSQL--打开此处可查看本次执行的语句
EXEC (@STRSQL)--执行语句
GO
--调用存储过程
PRO_BIRTHDAY 7
--删除存储过程(可以不写这句)
DROP PROC PRO_BIRTHDAY
--convert函数把日期转成字符有多种形式本例中用的就是只取日期中的月和日,
--利用了日加一的办法解决了求明天是哪一天的问题,在此题中其实我们最关心的就是下一天的月和日分别是什么
--日加一再用convert将其取出就恰好巧妙的解决的明天(下一天)的月和日分别是什么的问题
最后会跟据当前时间拼出如下语句
SELECT *
FROM userinfo
WHERE convert(VARCHAR(5), birthday, 110) = '02-27'
OR convert(VARCHAR(5), birthday, 110) = '02-28'
OR convert(VARCHAR(5), birthday, 110) = '03-01'
OR convert(VARCHAR(5), birthday, 110) = '03-02'
OR convert(VARCHAR(5), birthday, 110) = '03-03'
OR convert(VARCHAR(5), birthday, 110) = '03-04'
OR convert(VARCHAR(5), birthday, 110) = '03-05'
热心网友
时间:2022-04-07 22:37
select * From users
where (DATEDIFF(DAY,getdate(),cast(stuff(convert(varchar(10),Birth,120),1,4,'2008') as datetime))<5
and DATEDIFF(DAY,getdate(),cast(stuff(convert(varchar(10),Birth,120),1,4,'2008') as datetime))>-1) 看行不
热心网友
时间:2022-04-08 00:11
select * From users where (DATEDIFF(DAY,Birth,getdate())<5 and DATEDIFF(DAY,Birth,getdate())>-1)