如何在mssql中实现查询一个月前的记录
数据库里的记录时间的表现使用varchar类型的。各个记录格式如下:
11-6月 -06
12-5月 -06
16-2月 -06
16-3月 -06
16-3月 -06
16-4月 -06
16-6月 -06
17-5月 -06
27-5月 -06
数据库里的记录时间的表现使用varchar类型的。各个记录格式如下:
11-6月 -06
12-5月 -06
16-2月 -06
16-3月 -06
16-3月 -06
16-4月 -06
16-6月 -06
17-5月 -06
27-5月 -06
数据库里的记录时间的表现使用varchar类型的。各个记录格式如下:
11-6月 -06
12-5月 -06
16-2月 -06
16-3月 -06
16-3月 -06
16-4月 -06
16-6月 -06
17-5月 -06
27-5月 -06
select * from tb where substring(时间,4,1)=dateadd(month,-1,getdate())
CREATE FUNCTION LawDate(@dt CHAR(20))
RETURNS DATETIME
AS
BEGIN DECLARE @y INT,@m INT,@d INT,@dt1 CHAR(20),@rd CHAR(20)
SET @dt1=REPLACE(@dt,'月 ','')
SET @d=LEFT(@dt1,CHARINDEX('-',@dt1)-1)
SET @m=LEFT(REPLACE(@dt1,RTRIM(@d) + '-',''),CHARINDEX('-',REPLACE(@dt1,RTRIM(@d) + '-',''))-1)
SET @y=REPLACE(REPLACE(@dt1,RTRIM(@d) + '-',''),RTRIM(@m) + '-','')
SET @rd=RTRIM(@y) + '-' + RTRIM(@m) + '-' + RTRIM(@d)
RETURN CAST(@rd AS DATETIME)
END
Month(GetDate().DateAdd(mm, -1)) :)
----------------------
没看懂.不好意思.是SQL2005中的语法吗?
另外这样写的话,也仅仅只是用Month与字段中的月份比较,无法区别是1月还是13月或是25月
写着都忘了,在函数里写的麻烦了,把RIGHT都忘了..
vio的表中取得这个表的最近的日期,然后要从这个日期开始先前推算出一个月,把结果查询出来
记录日期的字段名称为gxsj.上面已经说过这个字段是varchar类型的不是datetime类型的.例如
[gxsj]
11-6月 -06
12-5月 -06
16-2月 -06
16-3月 -06
16-3月 -06
16-4月 -06
16-6月 -06
17-5月 -06
27-5月 -06
Declare @Dt DateTime
Select @Dt =Max(日期) From vio
Select * From TableName Where Substring(時間字段,CharIndex('-',時間字段)+1,CharIndex(N'月',時間字段)-CharIndex('-',時間字段)-1) =Month(@Dt)-1 And Right(時間字段,2)=Right(Year(@Dt),2)
Select @Dt =Max(gxsj) From vio_cx
Select * From vio_cx Where Substring(gxsj,CharIndex('-',gxsj)+1,CharIndex(N'月',gxsj)-CharIndex('-',gxsj)-1) =Month(@Dt)-1 And Right(gxsj,2)=Right(Year(@Dt),2)
服务器: 消息 241,级别 16,状态 1,行 2
从字符串转换为 datetime 时发生语法错误。
!!!
那是怎樣的??也是“27-5月 -06”這種格式嗎??
Create Function GetTime(@S Nvarchar(20))
Returns DateTime
As
Begin
Return Cast(Right(@S,2)+Right(100+Substring(@S,CharIndex('-',@S)+1,CharIndex(N'月',@S)-CharIndex('-',@S)-1) ,2)+Left(@S,2) As DateTime)
End
GO
Declare @Dt DateTime
Select @Dt =Max(dbo.GetTime(日期)) From vio
Select * From TableName Where Month(dbo.GetTime(時間字段)) =Month(@Dt)-1 And Year(dbo.GetTime(時間字段)) =Year(@Dt)-1
Returns DateTime
As
Begin
Return Cast(Right(@S,2)+Right(100+Substring(@S,CharIndex('-',@S)+1,CharIndex(N'月',@S)-CharIndex('-',@S)-1) ,2)+Left(@S,2) As DateTime)
End
GO
Declare @Dt DateTime
Select @Dt =Max(dbo.GetTime(日期)) From vio_cx
Select * From vio_cx Where Month(dbo.GetTime(時間字段)) =Month(@Dt)-1 And Year(dbo.GetTime(時間字段)) =Year(@Dt)