给定Date参数被视为Date Time参数

时间:2014-08-30 05:37:30

标签: sql sql-server tsql date

我正在用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'

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

请帮助我!

2 个答案:

答案 0 :(得分: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-06-02的边界)和一个独占的上边界(早于2014-06-03),但只定义一次变量。因此,有效的查询检查2014-06-02 <= FromDate < 2014-06-03

答案 1 :(得分: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)