2014-08-30 110 views
1

我正在写一个存储过程在SQL!给定日期参数被认为是日期时间参数

我必须在特定日期取得记录。

我使用此查询:

Declare @FromDate datetime 
set @FromDate = '06/02/2014' 

select * from Table where Date = @FromDate 

其实,在数据库中有10个记录在该日期,但它显示,因为@FromDate正在这样06/02/2014 00:00:00.000

如果只有两个记录我写这样的查询意味着它可以正常工作!

select * from Table 
where Date between '2014-08-28 00:00:00.000' and '2014-08-28 23:59:59.999' 

如何解决这个问题?我需要得到那个特定日期的所有记录。

请帮帮我!

+0

如果你的SQL Server 2008 ** **或更高版本上,你只需要日期(没有时间部分),你应该使用'DATE'数据类型,确切地说 - 只存储** **日期,没有时间部分,因此选择一个日期变得非常容易 – 2014-08-30 06:22:16

回答

0

如果您将DateTime转换为Nvarchar您的问题将得到解决。

尝试此查询:

Declare @Date datetime='2014-08-28 00:00:00.000' 

select * from Table 
where CONVERT(nvarchar(20),Date,105) = CONVERT(nvarchar(20),@Date,105) 
+0

好主意,谢谢麦克:) – 2014-08-30 06:34:24

+1

@ Jake745如果你想使用索引,不是一个好主意日期列来查找您正在查找的行。 – 2014-08-31 16:46:47

2

如果@FromDate的数据类型为datetimeTable.Date的也是数据类型的datetime则:

Declare @FromDate datetime = '2014-06-02'; 

Select Table.Date 
From Table 
Where Table.Date >= @FromDate And Date < DateAdd(day, 1, Table.Date) 

上面,我们建立一个包容性的下限(任何等于或晚于2014年6月2日)和一个独特的上限(任何早于2014-06-03的),但是只定义一次变量。所以,有效的查询检查2014-06-02 <= FromDate < 2014-06-03