Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MS SQL将日期转换为短日期_Sql_Datetime - Fatal编程技术网

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;