将日期添加到字符串但得到:数据类型 varchar(max) 和日期在添加运算符中不兼容
Add date to string but getting: The data types varchar(max) and date are incompatible in the add operator
我在 table.I 中有一个列 date_of_creation
保存为 varchar
我正在尝试通过将 date_of_creation
字段转换为日期来获取日期之间的记录。
SET @WhereQuery = @WhereQuery + ' AND CONVERT(Date,tbl.date_of_creation,103) BETWEEN ''' +CONVERT(date,ISNULL(@DateFrom,'1/1/1753'),101) + ''' + AND ''' +CONVERT(date,ISNULL(@DateTo, GETDATE()),101)+ ''''
PRINT @WhereClause
我低于错误
The data types varchar(max) and date are incompatible in the add operator.
我知道我收到此错误是因为我正在尝试将 DATE 类型与字符串连接 @WhereClause
如何解决这个问题?
你的引号放错了地方 @WhereClause
!= @WhereQuery
.
DECLARE @WhereQuery NVARCHAR(MAX) = '', @DateFrom VARCHAR(12), @DateTo VARCHAR(21);
SET @WhereQuery = @WhereQuery
+ ' AND CONVERT(Date,tbl.date_of_creation,103)'
+ ' BETWEEN CONVERT(date,''' + ISNULL(@DateFrom,'1/1/1753') + ''',101)
AND CONVERT(date,''' + ISNULL(@DateTo, CONVERT(VARCHAR(32),GETDATE(),101)) + ''',101)';
PRINT @WhereQuery;
请注意,您对 table 列使用英国格式 (103),对变量使用美国格式 (101),这似乎很奇怪。我本来希望他们是一致的。您确实需要确保对所使用的数据使用正确的格式。
对于我的测试,我使用了:
SET @WhereQuery = @WhereQuery
+ ' AND CONVERT(Date,tbl.date_of_creation,103)'
+ ' BETWEEN CONVERT(date,''' + ISNULL(@DateFrom,'1/1/1753') + ''',103)
AND CONVERT(date,''' + ISNULL(@DateTo, CONVERT(VARCHAR(32),GETDATE(),103)) + ''',103)';
此外,我强烈建议将 date_of_creation
转换为正确的 datetime
日期类型。使用字符串存储日期时间值是自找麻烦。
我在 table.I 中有一个列 date_of_creation
保存为 varchar
我正在尝试通过将 date_of_creation
字段转换为日期来获取日期之间的记录。
SET @WhereQuery = @WhereQuery + ' AND CONVERT(Date,tbl.date_of_creation,103) BETWEEN ''' +CONVERT(date,ISNULL(@DateFrom,'1/1/1753'),101) + ''' + AND ''' +CONVERT(date,ISNULL(@DateTo, GETDATE()),101)+ ''''
PRINT @WhereClause
我低于错误
The data types varchar(max) and date are incompatible in the add operator.
我知道我收到此错误是因为我正在尝试将 DATE 类型与字符串连接 @WhereClause
如何解决这个问题?
你的引号放错了地方 @WhereClause
!= @WhereQuery
.
DECLARE @WhereQuery NVARCHAR(MAX) = '', @DateFrom VARCHAR(12), @DateTo VARCHAR(21);
SET @WhereQuery = @WhereQuery
+ ' AND CONVERT(Date,tbl.date_of_creation,103)'
+ ' BETWEEN CONVERT(date,''' + ISNULL(@DateFrom,'1/1/1753') + ''',101)
AND CONVERT(date,''' + ISNULL(@DateTo, CONVERT(VARCHAR(32),GETDATE(),101)) + ''',101)';
PRINT @WhereQuery;
请注意,您对 table 列使用英国格式 (103),对变量使用美国格式 (101),这似乎很奇怪。我本来希望他们是一致的。您确实需要确保对所使用的数据使用正确的格式。
对于我的测试,我使用了:
SET @WhereQuery = @WhereQuery
+ ' AND CONVERT(Date,tbl.date_of_creation,103)'
+ ' BETWEEN CONVERT(date,''' + ISNULL(@DateFrom,'1/1/1753') + ''',103)
AND CONVERT(date,''' + ISNULL(@DateTo, CONVERT(VARCHAR(32),GETDATE(),103)) + ''',103)';
此外,我强烈建议将 date_of_creation
转换为正确的 datetime
日期类型。使用字符串存储日期时间值是自找麻烦。