sql - 在SQL Server中无时间比较日期的最佳方法

标签 sql sql-server datetime utc

select * from sampleTable 
where CONVERT(VARCHAR(20),DateCreated,101) 
=     CONVERT(VARCHAR(20),CAST('Feb 15 2012  7:00:00:000PM' AS DATETIME),101)

我想比较没有时间的日期

以上查询可以吗?或您建议的其他更好的解决方案
  • 我正在使用SQL Server 2005
  • 以UTC格式保存在服务器
  • 上的日期
  • 针对此数据的用户属于不同的时区
  • 最佳答案

    不要使用convert-无原因地涉及字符串。一个技巧是,日期时间实际上是数字,而天是整数部分(时间是小数部分);因此,一天是值的 FLOOR :那么,这只是数学运算,而不是字符串-更快

    declare @when datetime = GETUTCDATE()
    select @when -- date + time
    declare @day datetime = CAST(FLOOR(CAST(@when as float)) as datetime)
    select @day -- date only
    

    就您而言,无需转换回日期时间;并使用范围可以进行最有效的比较(尤其是在建立索引的情况下):
    declare @when datetime = 'Feb 15 2012  7:00:00:000PM'
    declare @min datetime = FLOOR(CAST(@when as float))
    declare @max datetime = DATEADD(day, 1, @min)
    
    select * from sampleTable where DateCreated >= @min and DateCreated < @max
    

    关于sql - 在SQL Server中无时间比较日期的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9308635/

    相关文章:

    sql - SQL 中的合并选择语句

    sql-server - 解决 SQL if 条件的最佳方法

    c# - SQL Server CE 3.5 提前切断字符串 (C#)

    python - 如何将带有日期的列表拆分为每周分区

    c# - 时间跨度的总和差异,按每年的旅行天数排序

    datetime - 需要一个公式 : Extracting Years from Seconds Since January 1, 0001 12:00 AM

    MySQL GROUP_CONCAT 返回重复值。无法使用 DISTINCT

    sql - 有通用的方法可以用触发器替换参照约束吗?

    sql - 根据另一列的值更新列

    mysql - 如何发现 RDBMS 中的关系?