MS SQL将日期转换为短日期
我正试图从一个表中获取所有记录,其中MS SQL将日期转换为短日期,sql,datetime,Sql,Datetime,我正试图从一个表中获取所有记录,其中ExpiryDate字段正好还有一个月 然而,问题是ExpiryDate与小时、分钟和秒一起存储。因此,我该怎么说呢?从我的表中获取所有记录,其中ExpiryDate(dd/MM/yyyy)比现在(dd/MM/yyyy)提前一个月 这就是我目前拥有的: SELECT * FROM dbo.Custom_MembershipTransaction mt (nolock) WHERE mt.ExpiryDate = DATEADD(MONTH,
ExpiryDate
字段正好还有一个月
然而,问题是ExpiryDate
与小时、分钟和秒一起存储。因此,我该怎么说呢?从我的表中获取所有记录,其中ExpiryDate(dd/MM/yyyy)比现在(dd/MM/yyyy)提前一个月
这就是我目前拥有的:
SELECT * FROM dbo.Custom_MembershipTransaction mt (nolock)
WHERE mt.ExpiryDate = DATEADD(MONTH, 1, GETDATE())
AND mt.IsComplete = 1;
试试这个:
SELECT * FROM dbo.Custom_MembershipTransaction mt (nolock)
WHERE convert(varchar, mt.ExpiryDate, 102) = convert(varchar, DATEADD(MONTH, 1, GETDATE()),102)
AND mt.IsComplete = 1;
你需要一些时间,比如
SELECT * FROM dbo.Custom_MembershipTransaction mt (nolock)
WHERE mt.ExpiryDate < DATEADD(MONTH, 1, GETDATE())
AND mt.ExpiryDate > DATEADD(DAY, -1, DATEADD(MONTH, 1, GETDATE()))
AND mt.IsComplete = 1;
从dbo.Custom\u membership事务mt(nolock)中选择*
其中mt.ExpiryDateDATEADD(DAY,-1,DATEADD(MONTH,1,GETDATE())
mt.IsComplete=1;
这将使您获得所有记录,这些记录的过期日期介于1个月和(1个月-1天)之间。SELECT*FROM dbo.Custom\u membership transaction mt(nolock)
其中mt.expireydate>=DATEADD(DAY,DATEDIFF(DAY,0,DATEADD(MONTH,1,GETDATE()),0)
和mt.ExpiryDate
我没有对ExpiryDate进行操作,因为它可能会被索引使用。我得到:Msg 102,级别15,状态1,第2行“1”附近的语法不正确。我正在使用Microsoft SQL Server AAA“+间隔1个月”我认为它在MSSQL中不起作用,但我可以将其更改为DATEADDAh好的,我知道你在那里做什么。我现在来测试一下。顺便说一句,谢谢。这种方法将限制要使用的索引。这会忽略小时、分钟和秒吗?这将获得从GetDate()+1个月-1天到GetDate()+1个月的所有记录。用Serge的答案代替。我忘记了语法,但他的方法是正确的。这会忽略小时、分钟和秒吗?因为GETDATE()将返回日期时间而不是日期(yyyy/mm/dd),那么当天所有时间(hh:ii:ss)小于GETDATE()时间的条目都不会被包括在内,对吗?不,因为DATEDIFF返回int(截断发生)。请随意检查DATEADD(DAY,DATEDIFF(DAY,0,DATEADD(MONTH,1,GETDATE()))0的输出(当前为:2013-05-16 00:00:00.000我不知道。我不熟悉MSSQL,但在Mysql中不会发生截断
SELECT * FROM dbo.Custom_MembershipTransaction mt (nolock)
WHERE mt.ExpiryDate >= DATEADD(DAY, DATEDIFF(DAY, 0, DATEADD(MONTH, 1, GETDATE())), 0)
AND mt.ExpiryDate < DATEADD(DAY, DATEDIFF(DAY, 0, DATEADD(MONTH, 1, GETDATE()) + 1), 0)
AND mt.IsComplete = 1;