单个日期的选择失败,日期之间的工作正常吗?

时间:2016-08-28 11:10:50

标签: c# sql sql-server

在我正在处理的应用程序中,我需要能够从单个日期或所选日期的选择记录中选择记录,再加上x减去y天(日期范围)

这是工作的多个日期sql:

ALTER PROCEDURE [dbo].[sp_Select_Scandagen]

@datvoor datetime,
@datna datetime,
@scanner varchar(30)
AS
BEGIN

select ScannerID,ScannedTime,ScannedCode from [dbo].[tblScannedItems]
WHERE ScannedTime BETWEEN @datvoor AND @datna and  ScannerID like @scanner;

这是非工作单日期sql:

ALTER PROCEDURE [dbo].[sp_Select_Scandag]

@datum datetime,
@scanner varchar(30)
AS
BEGIN

select ScannerID,ScannedTime,ScannedCode from [dbo].[tblScannedItems]
WHERE ScannedTime like @datum AND ScannerID like @scanner;

当我在SSMS中执行第二个时,我得到:

DECLARE @return_value int

EXEC    @return_value = [dbo].[sp_Select_Scandag]
    @datum = N'15/7/2016',
    @scanner = N'975001'

SELECT  'Return Value' = @return_value

GO
Msg 8114, Level 16, State 5, Procedure sp_Select_Scandag, Line 2
Error converting data type nvarchar to datetime.

有什么建议吗?

THX, 詹姆斯

2 个答案:

答案 0 :(得分:2)

在比较like字段时,您需要使用=而不是datetime

ScannedTime = @datum

答案 1 :(得分:1)

Sql sever抛出Error converting data type nvarchar to datetime.因为N'15/7/2016'是一种语言相关的日期格式。使用与语言无关的日期格式

@datum = N'20160715' 

您可以使用dbcc useroptions;命令检查区域设置。

如果您只需比较日期时间变量的日期部分,则将其转换为日期。

WHERE cast(ScannedTime as date) = cast(@datum as date) AND ...