0

我有一个表,其中有一个日期时间列,我想通过仅传递日期和日期时间列来匹配此列,同时增加日期和时间(即 25/06/2013 4:54:12 PM)。

4

4 回答 4

5

在这种情况下,最好不要理会该列并对您的参数进行一些操作。因此,如果您要传递@SearchDate参数,我会这样做:

SELECT abc from mytable
where
   datetimecolumn >= @SearchDate and
   datetimecolumn < DATEADD(day,1,@SearchDate)

相信,如果您在 SQL Server 2008 或更高版本上运行,请使用以下内容:

SELECT abc from mytable
where
   CAST(datetimecolumn as date) = @SearchDate

datetimecolumn可以使用索引。而我确信在我的第一个查询中索引是可用的。通常,您应该警惕在列上调用函数 - 此类操作通常会通过强制进行全表扫描而削弱性能。

与你被接受的答案不同,我总是试图避免将日期视为字符串 - 一旦你这样做,你就会引发关于格式的各种问题。

于 2013-07-08T06:28:18.547 回答
0

t-sql 中的日期时间格式有点棘手,首先你需要知道日期时间(即 25/06/2013 4:54:12 PM)大于 25/06/2013 ,所以你需要使用> 和 < 运算符,对于 ![在此处输入图像描述][1]example orderdate > '20130625' AND orderdate < '20130626' ,sql server 将 'YYYYMMDD' 视为全局日期时间格式,它与语言无关。看看附件...

于 2013-07-08T06:02:34.943 回答
0

尝试 -:

DECLARE @givenDate DATE;

DECLARE @t AS TABLE (
    fld_DateTime DATETIME
)

SET @givenDate = '2013-04-24'

INSERT INTO @t ( fld_DateTime ) 
VALUES ('2013-04-23 14:37:59.580')
, ('2013-04-23 14:59:02.403')
, ('2013-04-23 15:15:36.890')
, ('2013-04-24 08:57:45.800')
, ('2013-04-24 10:44:56.663')
, ('2013-04-24 13:18:20.760')
, ('2013-04-25 09:38:55.503')
, ('2013-06-28 09:20:11.007')
, ('2013-06-28 12:37:04.973')
, ('2013-06-28 12:38:50.130')
, ('2013-07-03 15:27:36.167')

SELECT fld_DateTime
FROM @t
WHERE fld_DateTime >= @givenDate AND fld_DateTime < DATEADD(DAY, 1, @givenDate)
于 2013-07-08T06:28:17.293 回答
-4

您可以使用 CAST 和 CONVERT 函数来转换日期 http://msdn.microsoft.com/en-us/library/ms187928(v=sql.105).aspx

例如

select * 
from datetimetable 
where convert(char(10), datetimecolumn, 103) = '25/12/2013'

但请记住,此代码仅用于测试目的。我建议您使用 CONVERT 函数的不同参数以便更好地理解它(并使用不同大小的第一个参数)

请在您问题的其他答案中查看解决方案,以找出最适合您环境的解决方案

于 2013-07-08T05:51:54.590 回答