我有一个表,其中有一个日期时间列,我想通过仅传递日期和日期时间列来匹配此列,同时增加日期和时间(即 25/06/2013 4:54:12 PM)。
4 回答
在这种情况下,最好不要理会该列并对您的参数进行一些操作。因此,如果您要传递@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
可以使用索引。而我确信在我的第一个查询中索引是可用的。通常,您应该警惕在列上调用函数 - 此类操作通常会通过强制进行全表扫描而削弱性能。
与你被接受的答案不同,我总是试图避免将日期视为字符串 - 一旦你这样做,你就会引发关于格式的各种问题。
t-sql 中的日期时间格式有点棘手,首先你需要知道日期时间(即 25/06/2013 4:54:12 PM)大于 25/06/2013 ,所以你需要使用> 和 < 运算符,对于 ![在此处输入图像描述][1]example orderdate > '20130625' AND orderdate < '20130626' ,sql server 将 'YYYYMMDD' 视为全局日期时间格式,它与语言无关。看看附件...
尝试 -:
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)
您可以使用 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 函数的不同参数以便更好地理解它(并使用不同大小的第一个参数)
请在您问题的其他答案中查看解决方案,以找出最适合您环境的解决方案