【发布时间】:2018-07-10 08:28:56
【问题描述】:
我有一个包含年份列和月份列的表。年份是 INT,月份是 VARCHAR,如“一月”。我正在创建一个报告,用户应该能够简单地将 To 和 From 日期放入其中。这是我的存储过程。
SQL
ALTER PROCEDURE [Servicing].[ManualAdjustments]
@dateFrom INT,
@dateTo VARCHAR(50)
AS
BEGIN
SELECT *
FROM MyDatabase.dbo.MyTable
WHERE RefYear BETWEEN CONVERT(DATE,YEAR(@dateFrom)) AND CONVERT(DATE,YEAR(@dateTo))
AND RefMonth BETWEEN CONVERT(DATE,MONTH(@dateFrom)) AND CONVERT(DATE,MONTH(@dateTo))
END
当我运行它时,它返回“不允许从数据类型 int 到日期的显式转换”。我不确定我在语法上做错了什么。 我查看了关于 SO 的其他示例,但答案完全基于提问者问题,所以我发现很难解决我的问题。
有什么想法吗?
编辑 - 我试过的方法
1
ALTER PROCEDURE [Servicing].[ManualAdjustments]
@dateFrom DATE,
@dateTo DATE
AS
BEGIN
SELECT *
FROM MyDatabase.dbo.MyTable
WHERE RefYear BETWEEN CONVERT(DATE,YEAR(@dateFrom),0) AND @dateTo
AND RefMonth BETWEEN CONVERT(DATE,MONTH(@dateFrom),0) AND @dateTo
END
--ERROR -> 'Explicit conversion from data type int to date is not allowed.'
【问题讨论】:
-
所以您希望日期参数为 int 和 varchar?为什么不是日期数据类型?
-
我正在使用 Visual Studio 创建报告,因此理想情况下我希望 from 和 to 采用日期格式,以便用户可以使用日历简单地选择日期。我更喜欢转换为日期格式。当我将变量设置为 DATE 时,它不会运行并且我得到这个“操作数类型冲突:日期与 int 不兼容”。
-
我同意@HoneyBadger
@dateFrom和@dateTo应该是数据类型date,毕竟它们是日期。跨度> -
这个 SQL 没有意义,年/月函数从日期返回年/月作为 int 值 - 您不能将其任意转换为日期。
-
@NikosV 如果用户输入
year = 2017 and month = August,您是否希望从01-01-2017 till 31-08-2017返回结果?
标签: sql sql-server date