Sql server 搜索存储过程(SQL Server)--从字符串转换日期和/或时间时转换失败--简单?
我有一个存储过程,我将3个变量Sql server 搜索存储过程(SQL Server)--从字符串转换日期和/或时间时转换失败--简单?,sql-server,stored-procedures,Sql Server,Stored Procedures,我有一个存储过程,我将3个变量bankNumber,branchNumber和DateFrom传递到 基于这些变量,我想查询表(见存储过程下面的图片),以返回满足我传递的条件(通过变量)的所有记录 相反,我得到了以下错误: 从字符串转换日期和/或时间时转换失败 当我将DateFrom变量传递给它时,它似乎失败了 谢谢你的帮助 ALTER PROCEDURE [dbo].[Search_Records] @bankNumber varchar(3), @branchNumber
bankNumber
,branchNumber
和DateFrom
传递到
基于这些变量,我想查询表(见存储过程下面的图片),以返回满足我传递的条件(通过变量)的所有记录
相反,我得到了以下错误:
从字符串转换日期和/或时间时转换失败
当我将DateFrom
变量传递给它时,它似乎失败了
谢谢你的帮助
ALTER PROCEDURE [dbo].[Search_Records]
@bankNumber varchar(3),
@branchNumber varchar(3),
@dateCreated datetime
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
DECLARE
@Bank_Number varchar(3) = @bankNumber,
@Branch_Number varchar(3) = @branchNumber,
@DateFrom datetime = @dateCreated,
@DateTo datetime = @dateCreated
SELECT DISTINCT
A.bankNumber,
A.branchNumber,
A.dateCreated
FROM
dbo.CENSORED A
WHERE
(@Branch_Number IS NULL OR bankNumber LIKE @BankNumber + '%')
AND (@Branch_Number IS NULL OR branchNumber LIKE @Branch_Number + '%')
AND (@DateFrom IS NULL OR dateCreated LIKE + @DateFrom + '%')
AND (@DateTo IS NULL OR dateCreated LIKE + @DateTo + '%')
END
不能使用带有日期时间值的
LIKE
运算符。如果只在月份匹配,则需要使用month()
函数LIKE
运算符只能与字符串数据类型一起使用
不明白存储过程中声明的所有这些变量的意义,简化版本应该类似于
ALTER PROCEDURE [dbo].[Search_Records]
@bankNumber varchar(3),
@branchNumber varchar(3),
@dateCreated datetime
AS
BEGIN
SET NOCOUNT ON;
SELECT DISTINCT
A.bankNumber,
A.branchNumber,
A.dateCreated
FROM
dbo.CENSORED A
WHERE
(@Branch_Number IS NULL OR bankNumber LIKE @bankNumber + '%')
AND (@Branch_Number IS NULL OR branchNumber LIKE @branchNumber + '%')
AND (@dateCreated IS NULL OR (MONTH(dateCreated) = MONTH(@dateCreated)
AND
YEAR(dateCreated) = YEAR(@dateCreated)))
END
注
这将产生一个非常低效的执行计划,考虑使用动态SQL来查询具有可选参数的这一个。< /P>您使用MySQL吗?还是SQL Server?它们不是同一件事。@johncode-sql-server感谢您指出这一点。您所说的
@DateFrom+'%'
是什么意思?配对月份?比赛日?配对年?匹配时间?………@M.Ali我只想匹配月份。谢谢你的提问。@dateCreated
是从哪里来的?我很抱歉,我知道我之前误报了你,我的意思是我正在尝试匹配此格式MM/DD/YYMM/DD/YY
是日期时间值的字符串表示形式。您的列和变量都是Datetime数据类型,这很好。您只需要在select中使用Convert函数来获得所需的日期格式,我认为应该是Convert(VARCHAR(8),A.dateCreated,1)
我现在要实现它,看看它是如何实现的。我会开车。非常感谢。