【问题标题】:Varchar and Date Incompatible SQLVarchar 和日期不兼容的 SQL
【发布时间】:2018-11-03 16:04:12
【问题描述】:

我已经编写了下面的 SQL 并尝试使用变量来完成它。

--Select DB
USE [gkretail_master]

--Declare Varibles
DECLARE @StartDate DATE;
DECLARE @EndDate DATE;
DECLARE @SQL VARCHAR(8000);

--Set Variables
SET @StartDate = '2018-05-23 00:00:00.000';
SET @EndDate = '2018-05-23 23:59:00.000' 
SET @SQL =
        'SELECT
            RETAIL_STORE_NUMBER AS ''Store Number'',
            DESCRIPTION_1 AS ''Store Name'', 
            CAST(SUM(BRUTTOGES) AS DECIMAL(18,2)) AS ''Total Taken''
        FROM [GKRETAIL_MASTER].[GK_BONKOPF] 
            JOIN [gkretail_master].[GK_STORE_DATA] ON [GK_BONKOPF].[ID_BSNGP] = [GK_STORE_DATA].[ID_BSNGP]
        WHERE 
            AKTDAT > '+ @StartDate +' 
        AND 
            AKTDAT < '+ @EndDate +' 
        GROUP BY [GK_BONKOPF].[ID_BSNGP], DESCRIPTION_1, RETAIL_STORE_NUMBER';

EXECUTE(@SQL);

然而它返回错误:

数据类型 varchar 和 date 在 add 运算符中不兼容。

我进行了一些谷歌搜索并尝试使用 CAST 和 convert 来解决它,但它标记了更多错误。

有什么想法吗?

【问题讨论】:

  • 你在哪个数据库上运行这个?
  • 相关数据库表的架构是什么?

标签: sql sql-server concat


【解决方案1】:

没错。这是您应该使用sp_executesql 传递参数的一个重要原因:

SET @SQL =
        'SELECT
            RETAIL_STORE_NUMBER AS ''Store Number'',
            DESCRIPTION_1 AS ''Store Name'', 
            CAST(SUM(BRUTTOGES) AS DECIMAL(18,2)) AS ''Total Taken''
        FROM [GKRETAIL_MASTER].[GK_BONKOPF] 
            JOIN [gkretail_master].[GK_STORE_DATA] ON [GK_BONKOPF].[ID_BSNGP] = [GK_STORE_DATA].[ID_BSNGP]
        WHERE 
            AKTDAT > @StartDate 
        AND 
            AKTDAT < @EndDate 
        GROUP BY [GK_BONKOPF].[ID_BSNGP], DESCRIPTION_1, RETAIL_STORE_NUMBER';

EXEC sp_executesql @SQL,
     N'@StartDate date, @EndDate date',
     @StartDate = @StartDate, @EndDate = @EndDate;

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 2022-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多