代码之家  ›  专栏  ›  技术社区  ›  SP1

在SQL Server中转换为日期时间

  •  0
  • SP1  · 技术社区  · 6 年前

    我有一个简单的SQL语句

    select convert(datetime, '1/1/2018')
    

    当我查看它的输出时,我看到它正在转换为 2018-01-01 00:00:00.000 . 在时间段中,是否可以获取一天的结束时间而不是一天的开始时间?

    我正在使用此项根据转换日期提取数据,但无法检索此记录 1/1/2018 15:10:43 因为时间问题。

    有什么建议吗?

    谢谢

    更新

    看起来我能做到 SELECT DATEADD(ms, -3, '5/31/2018') + 1 为了解决我的问题……从 Here

    2 回复  |  直到 6 年前
        1
  •  2
  •   S3S    6 年前

    当我查看它的输出时,我看到它正在转换为 2018年1月31日00:00:00.000

    我不能复制你的结果。 select convert(datetime,'1/1/2018') 不返回1月31日。它返回1月1日。

    我用这个根据转换日期提取数据,但失败了 由于时间问题,检索此记录1/1/2018 15:10:43

    因为你要把它转换成 DATETIME ,它有一个时间 00:00:00 现在是午夜。因此,它无法在午夜后取回任何东西,比如 15:10 在同一天。最简单的方法是让你的接线员 < 这个 第二天… 所以你不必计算小时,分钟,秒,毫秒…

    where fetch < '20180102'

    注意我没用 convert 因为SQL Server将为我们处理这个问题,但是如果您能更清楚地了解它,您可以随意添加它。

    where fetch < convert(datetime,'20180102')

    还要注意,我使用的是ANSI标准 YYYYMMDD . 其他方法,使用时会导致问题 DATETIME2 或者需要更精确的测量,就是说 seconds 到你的约会和使用 <= .

    select dateadd(second,86399,convert(datetime,'20180101'))
    

    注意这有毫秒 000 不过,这可能会在以后对您产生影响,所以我建议您使用 次日 .

    毫秒…

    select dateadd(millisecond,86399999,convert(datetime2,'20180101'))
    
        2
  •  0
  •   haag1    6 年前

    如果要使用转换的 datetime 要进行比较,您需要知道它将始终收到00:00:00.000的时间。这将导致在给定日期发生任何事情,但会有更大的时间从结果集中排除。

    要解决此问题,您需要在搜索的字段上设置匹配的时间。下面的代码将使date time字段中的每个结果的时间为00:00:00.000,与转换后的日期相同。

    (DATEADD(dd, DATEDIFF(dd, 0, my_col)