【问题标题】:How To Change SQL Query [duplicate]如何更改 SQL 查询 [重复]
【发布时间】:2011-10-17 01:37:44
【问题描述】:

如何将此查询修改为 >>> @Date1 是日期(只有日期没有时间)

SELECT DISTINCT TOP (200) dbo.tb_ShowTime.VenueId, DATEADD(Hour, DATEDIFF(Hour, 0, dbo.tb_ShowTime.StartDateTime), 0) AS StartDateTime
FROM         tb_ShowTime
WHERE     (dbo.tb_ShowTime.IsDeleted = 0) AND (dbo.tb_ShowTime.StartDateTime BETWEEN @Date1 AND @Date2)
UNION
SELECT DISTINCT TOP (200) dbo.tb_EventSectionTime.VenueId, DATEADD(Hour, DATEDIFF(Hour, 0, dbo.tb_EventSectionTime.EventTime), 0) AS StartDateTime
FROM         tb_EventSectionTime
WHERE     (dbo.tb_EventSectionTime.IsDeleted = 0) AND (dbo.tb_EventSectionTime.EventTime BETWEEN @Date1 AND @Date2)
ORDER BY StartDateTime 

【问题讨论】:

  • 仅供参考:使用 UNION 的 DISTINCT 是多余的,因为 UNION 会删除重复项。此外,每个中的 TOP 200 是随机的 200 行。您需要一个派生表才能在 UNION 和外部 ORDER BY 之前读取 TOP 200..ORDER BY...
  • 什么意思?一个简单的EventTime> @Date1? >>> 在您的问题中是什么意思?
  • 我读到 OP 需要更改查询,以便 @Date1 是不包括时间的日期,假设它当前是 datetime

标签: sql stored-procedures date


【解决方案1】:

您可以使用这些函数
Day(@date1)返回日期的日期
Month(@date1)返回日期的月份
year(@date1)返回日期的年份

【讨论】:

    【解决方案2】:

    当我遇到这个问题时,我使用了CAST(@Date1 as DATE) 那是在 SQL-Server 中。它将时间片段截断为 00:00:00。 如果您使用的是不同的 DBMS,请尝试为相关引擎查找转换函数。

    【讨论】:

    • 只是补充一下,这个数据类型是在 SQL Server 2008 中添加的,所以在以前的版本中不起作用。
    • 我们已经被告知“@Date1 是一个日期(只有日期没有时间)”。
    【解决方案3】:

    不确定您使用的是哪个 dbms,但在 Sybase 中您可以转换为字符串,然后再转换回日期时间,以丢失时间部分。当然你可以和其他人做类似的事情。

    convert(datetime,convert(varchar,@Date1,109))
    

    【讨论】:

      猜你喜欢
      • 2013-02-09
      • 1970-01-01
      • 2016-10-14
      • 1970-01-01
      • 2020-02-17
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多