日期大于整数日期的sql [关闭]
Posted
技术标签:
【中文标题】日期大于整数日期的sql [关闭]【英文标题】:sql where date is bigger than integer date [closed] 【发布时间】:2018-06-05 14:04:09 【问题描述】:我有一个存储过程,表由整数组成,表示年、月、日的日期。
BEGIN
SET NOCOUNT ON;
SELECT
[Address],
FROM [dbo].[Stats]
WHERE DATEADD(year, [year]-1900, DATEADD(month, [month]-1, DATEADD(day, [day]-1, DATEADD(hour, [hour]-1, DATEADD(minute, [minute]-1, 0))))) >= @datetime
END
如果我将日期时间传递给存储过程,我该如何做 where 语句。如何简化以下程序?
我也试过了
DATEADD(year, [year]-1900, DATEADD(month, [month]-1, DATEADD(day, [day]-1, DATEADD(hour, [hour]-1, DATEADD(minute, [minute]-1, 0))))) as [DateTime]
FROM [dbo].[Stats]
AND [DateTime] >= @datetime
它说 [DateTime] 不存在,如何从存储过程的计算中分配 AS 新字段?查询正常。
【问题讨论】:
用您正在使用的数据库(很明显是 SQL Server)标记您的问题。 How to create a Date in SQL Server given the Day, Month and Year as Integers的可能重复 您不能在 where 子句中使用像[DateTime]
这样的别名,您需要在 AND
语句中再次重复整个计算。我不相信在normal query
中是这样的
【参考方案1】:
使用datetimefromparts()
:
WHERE datetimefromparts([year], [month], [year], [hour], [minute], 0) >= @datetime
我不确定您为转换所做的算术是什么。显然,您可以将这样的表达式作为参数包含在函数中。
【讨论】:
datefromparts 只接受 3 个参数 那么哪里 (datefromparts([year], [month], [year]) >= @datetime and datefromparts([hour], [minute], 0) >= @datetime) ?跨度> 如果你只有到一天(没有时间),那么使用datefromparts()
,如果你想要完整的日期时间,那么使用datetimefromparts()
。【参考方案2】:
SELECT DQ.Address, DQ.[DateTime]
(SELECT *,
DATEADD(year, [year]-1900, DATEADD(month, [month]-1, DATEADD(day, [day]-1, DATEADD(hour, [hour]-1, DATEADD(minute, [minute]-1, 0)))))
AS [DateTime]
)
FROM [dbo].[Stats]) AS DQ
WHERE DQ.[DateTime] >= @datetime
【讨论】:
以上是关于日期大于整数日期的sql [关闭]的主要内容,如果未能解决你的问题,请参考以下文章