转换为 SQL 服务器中的日期时间
Convert to datetime in SQL Server
我有一个简单的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
得到灵感
When I look at the output of it I see it is getting converted to
2018-01-31 00:00:00.000
我无法重现您的结果。 select convert(datetime,'1/1/2018')
没有 return 1 月 31 日。 return1 月 1 日。
I am using this to fetch data based on the converted date and it fails
to retrieve this record 1/1/2018 15:10:43 because of the time thing
由于您将其转换为 DATETIME
,因此它的时间为 00:00:00
,即午夜。因此,它无法在午夜后检索任何内容,例如同一天的 15:10
。最简单的方法是让您的操作员 <
成为 第二天... 这样您就不必考虑小时、分钟、秒、毫秒...
where fetch < '20180102'
请注意,我没有使用 convert
,因为 SQL 服务器会为我们处理这个问题,但如果它能让您更清楚,请随时添加它。
where fetch < convert(datetime,'20180102')
另请注意,我使用了 YYYYMMDD
的 ANSI 标准。当您使用 DATETIME2
或想要更精确的测量时会导致问题的其他方法是将 seconds
添加到您的日期并使用 <=
.
select dateadd(second,86399,convert(datetime,'20180101'))
请注意,这有 000
毫秒,所以这可能会在您以后逐渐蔓延,这就是为什么我建议使用 次日 .
毫秒...
select dateadd(millisecond,86399999,convert(datetime2,'20180101'))
如果您要使用转换后的 datetime
进行比较,您需要注意它将始终收到 00:00:00.000 的时间。这将导致在给定日期但时间较长的任何内容都被排除在结果集中之外。
要解决此问题,您需要在要搜索的字段上设置时间以匹配。下面的代码将使您的日期时间字段中的每个结果的时间为 00:00:00.000,与您转换后的日期相同。
(DATEADD(dd, DATEDIFF(dd, 0, my_col)
我有一个简单的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
When I look at the output of it I see it is getting converted to 2018-01-31 00:00:00.000
我无法重现您的结果。 select convert(datetime,'1/1/2018')
没有 return 1 月 31 日。 return1 月 1 日。
I am using this to fetch data based on the converted date and it fails to retrieve this record 1/1/2018 15:10:43 because of the time thing
由于您将其转换为 DATETIME
,因此它的时间为 00:00:00
,即午夜。因此,它无法在午夜后检索任何内容,例如同一天的 15:10
。最简单的方法是让您的操作员 <
成为 第二天... 这样您就不必考虑小时、分钟、秒、毫秒...
where fetch < '20180102'
请注意,我没有使用 convert
,因为 SQL 服务器会为我们处理这个问题,但如果它能让您更清楚,请随时添加它。
where fetch < convert(datetime,'20180102')
另请注意,我使用了 YYYYMMDD
的 ANSI 标准。当您使用 DATETIME2
或想要更精确的测量时会导致问题的其他方法是将 seconds
添加到您的日期并使用 <=
.
select dateadd(second,86399,convert(datetime,'20180101'))
请注意,这有 000
毫秒,所以这可能会在您以后逐渐蔓延,这就是为什么我建议使用 次日 .
毫秒...
select dateadd(millisecond,86399999,convert(datetime2,'20180101'))
如果您要使用转换后的 datetime
进行比较,您需要注意它将始终收到 00:00:00.000 的时间。这将导致在给定日期但时间较长的任何内容都被排除在结果集中之外。
要解决此问题,您需要在要搜索的字段上设置时间以匹配。下面的代码将使您的日期时间字段中的每个结果的时间为 00:00:00.000,与您转换后的日期相同。
(DATEADD(dd, DATEDIFF(dd, 0, my_col)