在我正在处理的应用程序中,我需要能够从单个日期或所选日期的选择记录中选择记录,再加上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, 詹姆斯
答案 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 ...