【问题标题】:The data types varchar and datetimeoffset are incompatible in the add operator数据类型 varchar 和 datetimeoffset 在 add 运算符中不兼容
【发布时间】:2013-09-13 09:10:37
【问题描述】:

当我尝试在我的 SQL 语句中使用动态查询代码时

Declare @Start datetimeoffset;
Declare @End datetimeoffset;
Declare @SqlCommand nvarchar(Max);

Set @Start = '2013-05-17 10:00:04.500 +00:00';
Set @End = '2013-09-17 10:00:04.500 +00:00'
Set @SqlCommand = 'Select * from Test where TimeLine > '+ @Start+' AND TimeLine < '+@End

Exec(@SqlCommand)

我收到以下消息说

消息 402,第 16 级,状态 1,第 8 行
数据类型 varchar 和 datetimeoffset 在 add 运算符中不兼容。

请指导我正确的用法。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您需要将 DateTimeOffset 值转换为 varchars。 此外,您还缺少额外的引号。

    类似

    Declare @Start datetimeoffset = '2013-05-17 10:00:04.500 +00:00'
    Declare @End datetimeoffset = '2013-09-17 10:00:04.500 +00:00'
    Declare @SqlCommand nvarchar(Max)
    
    Set @SqlCommand = 'Select * from Test where SampleTime > '''+ CAST(@Start AS VARCHAR(50))+''' AND SampleTime < '''+CAST(@End AS VARCHAR(50)) + ''''
    
    SELECT @SqlCommand
    

    SQL Fiddle DEMO

    【讨论】:

      【解决方案2】:

      您应该添加'' 如下并将@Start / @End 转换为varchar

      Declare @Start datetimeoffset;
      Declare @End datetimeoffset;
      Declare @SqlCommand nvarchar(Max);
      
      Set @Start = '2013-05-17 10:00:04.500 +00:00';
      Set @End = '2013-09-17 10:00:04.500 +00:00'
      Set @SqlCommand = 'Select * from Test where SampleTime > '''+ cast(@Start as varchar(100))+''' AND SampleTime < '''+cast(@End as varchar(100))+''' '
      
      Exec(@SqlCommand)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-07
        • 1970-01-01
        • 1970-01-01
        • 2017-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多