SQL Server 2012 在选择带有类似日期时从字符串转换日期时出错



在我的表中,我有一个名为logDate的日期时间空字段。存储格式: 2014-03-28 12:24:00.000

我有一个表单,日志日期是搜索日志的字段之一。用户将输入日期,如 2014-03-28

所以在我的选择过程中,我需要使用 LIKE:

@logDate datetime =NULL
.
.
       SELECT .. FROM mytable WHERE
     (@logDate IS NULL OR CONVERT(VARCHAR, @logDate, 102) LIKE '%'+logDate+'%')

我执行程序:

EXEC dbo.SELECT_mytable @logDate= '2014-03-28'

但是我收到以下错误:

从字符串转换日期和/或时间时转换失败。

我做错了什么?

您还需要将 logdate 列转换为 varchar,我认为您在尝试在日期列中查找用户输入的日期时有错误的方式,因此请尝试:

SELECT .. FROM mytable WHERE
    (@logDate IS NULL
     OR '%'+CONVERT(VARCHAR, @logDate, 102)+'%' LIKE CONVERT(VARCHAR, logDate, 102))

正如其他人所指出的(我应该指出)您不应该为了搜索日期列而将日期转换为字符串,最好将所有内容都保留为 DateTime 格式以提高性能。

只要将存储过程更改为将 @logDate 参数作为 DateTime,这将起作用:

SELECT .. FROM mytable WHERE
    (@logDate IS NULL
     OR logDate = @logDate) 

我的印象是,您走上了字符串比较路线,因为您想忽略时间元素而只搜索日期,如果是这种情况,您可以从两个元素中剥离时间并通过这样做来匹配日期:

IF @logDate IS NOT NULL
 BEGIN
   // Remove any time element
   SET @logDate = DATEADD(dd,0, DATEDIFF(dd,0,@logDate))
 END
SELECT .. FROM mytable WHERE
    (@logDate IS NULL
     OR DATEADD(dd,0, DATEDIFF(dd,0,logDate)) = @logDate)

相关内容

  • 没有找到相关文章

最新更新