【问题标题】:sql where date is bigger than integer date [closed]日期大于整数日期的sql [关闭]
【发布时间】: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 sql-server


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多