日期大于整数日期的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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

sql语句获取日期大于当前日期的数据库数据

SQL语句中怎样比较两个日期的大小?

oracle查询日期字段大于某个日期值时sql语句怎么写

sql 数学函数and字符串函数and日期函数

SQL - SELECT存储在JSON varchar中的日期大于或小于固定日期

当字段名称大于或等于 1200 时添加 1 天日期格式 YYYYMMDD [关闭]