【发布时间】:2023-03-11 12:29:01
【问题描述】:
我在 SQL Server 中做了以下 SELECT 语句,这给了我错误:
将表达式转换为数据类型日期时间时出现算术溢出错误。
SELECT Id, CAST(CAST(CalendarDate as varchar(10)) as date)
FROM dbo.Sales
WHERE CalendarDate BETWEEN dateadd(month,-6, GETDATE()) AND (GETDATE())
Id = 唯一标识符
CalendarDate = int,我需要将其转换为日期。
我做错了什么?
我希望找到今天和 6 个月前之间的所有日期,但是我收到了上述错误。
感谢任何帮助。
谢谢。
【问题讨论】:
-
int和date/datetime是两种截然不同的类型。您希望它进行什么转换? -
是的。您尝试比较的两种数据类型都不同且不兼容。 CalendarDate 列中有哪些数据?
-
我希望从 int 到日期,正如我所写的那样。我还尝试将其转换为日期时间。还是不行。在 CalendarDate 列中,我有诸如“20200821”之类的数据作为 int。这基本上是 yyyymmdd。
-
试试 WHERE msdb.dbo.agent_datetime(CalendarDate,0) BWTEEEN .....
-
data type precedence 的规则表明,如果在表达式中组合
int和datetime,则int将转换为datetime。坏消息是20200821并不意味着你想要它:select Cast( 0 as DateTime ) as BaseDate, Cast( 1 as DateTime ) as OneDayLater;。您需要选择您的int部件并重新组装它,例如DateFromParts.
标签: sql-server tsql casting where-clause