操作数类型冲突:日期与使用 CONVERT() 解决的 int 不兼容.但是为什么



我的问题是为什么? 在以下情况下,SQL正在做什么导致此错误消息。

堆栈上有一些这样的查询,但通常是因为缺少 DateAdd()。 在这里,我只是尝试将作为审计注释字符串的一部分传递的日期放在记录中。 我并不是特别要求这两个变量一起玩并给我一个结果。

以下是问题行。 在底部对上下文进行更完整的查询。

@Days INT,@Date日期

"从 ' + @Date + ''

扩展到 ' + @Days + ' 的索赔

SELECT TOP 1
                ID,
                WorkFlowStatusCode ,
                'Number of days: ' + @Days + ' from ' + @Date + '.' ,
                @UserId ,
                @UserId
        FROM    dbo.Table
        WHERE   ID= @VariableA
        ORDER BY ID DESC;

我发现将 Convert() 中的@Date包装为 103 可以解决这个问题。 见下文。

'对索赔的扩展 ' + @Days + ' 从 ' +

CONVERT(NVARCHAR(10),@Date,103) + '." ,

我只是想从 SQL/数据库的角度理解为什么在这种情况下我需要这样做。 我无法在网上找到答案来帮助我理解。

非常感谢所有评论。

大概@Day是一个整数。 请记住,+可能意味着加法和字符串连接,因此SQL可能会混淆。 试试这个:

'Number of days: ' + convert(varchar(255), @Days) + ' from ' + convert(varchar(10), @Date, 103) + '.' 

笔记:

  • 使用 varchar()nvarchar() 时,请始终包括长度。 SQL Server 的默认长度因上下文而异。 不包括长度是创建非常难以调试的错误的一种简单方法。
  • 代码建议varchar()而不是nvarchar(),因为字符串的其余部分不是国家/地区字符集。

最新更新