我刚创建了以下存储过程
CREATE PROCEDURE [dbo].[FindIncomplete_Products]
@type nvarchar(250),
@category nvarchar(250),
@country nvarchar(250),
@subsidary nvarchar(250),
@date datetime
AS
Begin
select [dbo].[AB_Product].[ProductID],
[dbo].[AB_Product].[ProductTitleEn],
[dbo].[AB_Product].[ProductTitleAr],
[dbo].[AB_Product].[Status],
[dbo].[AB_ProductType].[ProductTypeNameEn],
[dbo].[AB_ProductType].[ProductTypeNameAr],
[dbo].[AB_ProductTypeCategory].[ProductCategoryNameEn],
[dbo].[AB_ProductTypeCategory].[ProductCategoryNameAr],
[dbo].[AB_Subsidary].[SubsidaryNameEn],
[dbo].[AB_Subsidary].[SubsidaryNameAr],
[dbo].[AB_Subsidary].[Country]
from
[dbo].[AB_Product]
inner join
[dbo].[AB_ProductType] on [dbo].[AB_ProductType].[ProductTypeID] = [dbo].[AB_Product].[ProductTypeID]
inner join
[dbo].[AB_ProductTypeCategory] on [dbo].[AB_ProductTypeCategory].[ProductCategoryID] = [dbo].[AB_Product].[ProductCategoryID]
inner join
[dbo].[AB_Subsidary] on [dbo].[AB_Subsidary].[SubsidaryID] = [dbo].[AB_Product].[Subsidary_ID]
WHERE
(@type IS NULL OR [dbo].[AB_Product].[ProductTypeID] LIKE '%' + @type + '%')
AND (@category IS NULL OR [dbo].[AB_Product].[ProductCategoryID] LIKE '%' + @category + '%')
AND (@country IS NULL OR [dbo].[AB_Subsidary].[Country] LIKE '%' + @country + '%')
AND (@subsidary IS NULL OR [dbo].[AB_Product].[Subsidary_ID] LIKE '%' + @subsidary + '%')
AND (@date IS NULL OR [dbo].[AB_Product].[CreatedDate] = @date)
End
我的数据库字段是日期时间字段[dbo].[AB_Product].[CreatedDate]
当我访问此存储过程时,我以此格式mm-dd-yyyy
传递了数据参数的值。
因为这是为“创建日期”字段寻找确切的值,AND ([dbo].[AB_Product].[CreatedDate] = @date)
我无法获得所有类似的结果。
例如,如果我想搜索创建日期为2015-08-27
的所有产品,一旦我将其作为参数值传递,我无法获得创建日期的所有结果2015-08-27
只有我可以获得结果已创建日期2015-08-27 00:00:00.000
。我错过了创建日期值为2015-08-27 13:03:50.647
答案 0 :(得分:1)
使用DateDiff
函数代替=
来比较日期。示例如下所示。
declare @str nvarchar(25)
set @str = '2015-09-17'
print datediff(d,getdate(),@str)
此DateDiff
将返回两个日期之间的天数差异。所以改变你的最后一行如下。
(@date IS NULL OR datediff(d,[dbo].[AB_Product].[CreatedDate],@date) = 0)
DateDiff的工作原理如下。
DATEDIFF ( datepart , startdate , enddate )
上阅读有关DateDiff的信息