我遇到了与将日期时间从XML(ISO8601:yyyy-mm-ddThh:mi:ss.mmm)转换为SQL Server 2005日期时间相关的问题.问题是转换毫秒是错误的.我已经使用nvarchar中的convert(datetime,MyDate,126)测试了隐式和显式转换,结果是相同的:
Original Result
2009-10-29T15:43:12.990 2009-10-29 15:43:12.990
2009-10-29T15:43:12.991 2009-10-29 15:43:12.990
2009-10-29T15:43:12.992 2009-10-29 15:43:12.993
2009-10-29T15:43:12.993 2009-10-29 15:43:12.993
2009-10-29T15:43:12.994 2009-10-29 15:43:12.993
2009-10-29T15:43:12.995 2009-10-29 15:43:12.997
2009-10-29T15:43:12.996 2009-10-29 15:43:12.997
2009-10-29T15:43:12.997 2009-10-29 15:43:12.997
2009-10-29T15:43:12.998 2009-10-29 15:43:12.997
2009-10-29T15:43:12.999 2009-10-29 15:43:13.000
Run Code Online (Sandbox Code Playgroud)
我的非广泛测试显示最后一位数字是0,3或7.这是一个简单的舍入问题吗?毫秒精度很重要,失去/获得一个或两个不是一个选择.
当我插入这些值
09/30/2013 05:04:56.599
09/30/2013 05:04:56.599
09/30/2013 05:04:56.599
09/30/2013 05:04:57.082
Run Code Online (Sandbox Code Playgroud)
在SqlServer数据库中,毫秒值以奇怪的方式变化
2013-09-30 05:04:56.600
2013-09-30 05:04:56.600
2013-09-30 05:04:56.600
2013-09-30 05:04:57.083
Run Code Online (Sandbox Code Playgroud)
怎么了 ?
编辑:相关代码:
com = new SqlCommand();
com.Connection = con;
com.CommandText = @"INSERT INTO [AuthSourceTimings]
([FileName]
,[JobID]
,[JobCreationTime]
,[JobSendTime]
,[JobAckTime]
,[JobDoneTime])
VALUES
(@FileName
,@JobID
,@JobCreationTime
,@JobSendTime
,@JobAckTime
,@JobDoneTime)
";
com.Parameters.AddWithValue("@FileName", fileName);
com.Parameters.AddWithValue("@JobID", t.JobID);
com.Parameters.AddWithValue("@JobCreationTime", t.JobCreationTime == DateTime.MinValue ? (object)DBNull.Value : (object)t.JobCreationTime);
com.Parameters.AddWithValue("@JobSendTime", t.JobSendTime == DateTime.MinValue ? (object)DBNull.Value : (object)t.JobSendTime);
com.Parameters.AddWithValue("@JobAckTime", t.JobAcknowledgementTime == DateTime.MinValue ? (object)DBNull.Value : (object)t.JobAcknowledgementTime);
com.Parameters.AddWithValue("@JobDoneTime", t.JobCompletionTime == DateTime.MinValue ? …Run Code Online (Sandbox Code Playgroud) 我发现了一些我认为与SQL中的时间分辨率有关的东西.这是我用过的一个例子:
CREATE TABLE #table
(
DTstamp DATETIME NOT NULL
)
INSERT INTO #table VALUES ('1 apr 2016 15:01:02:129')
SELECT DTstamp FROM #table
DROP TABLE #table
Run Code Online (Sandbox Code Playgroud)
SELECT在这种情况下,SQL Server Management Studio中显示的结果为0.001:
2016-04-01 15:01:02.130
Run Code Online (Sandbox Code Playgroud)
尝试多个值时,显示的结果通常在插入时间的0.003秒内.有谁知道差异来自哪里?
SQL版本:
Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64)
Oct 20 2015 15:36:27
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
Run Code Online (Sandbox Code Playgroud) DECLARE @dateEnd datetime
SET @dateEnd = '2014-11-30T23:59:59.999'
SELECT @dateEnd
Run Code Online (Sandbox Code Playgroud)
为什么我得到结果:
2014-12-01 00:00:00.000
我想为SELECT条件使用变量:
where [MyDate] between @dateStart and @dateEnd
Run Code Online (Sandbox Code Playgroud)
这是另一个问题,但相关.我希望包含第一个数据点(dataStart),并从所选数据范围中排除第二个(dataEnd).怎么做?
使用EntityFramework v4.1和IBM Data Server Client v9.7fp5,DB首先基于具有DATE列的预定义DB2表生成代码.在代码生成期间,DB2 DATE列将映射到.NET DateTime数据类型.
尝试INSERT连续时,收到以下错误
错误[22008] [IBM] CLI0114E日期时间字段溢出.SQLSTATE = 22008
这是有道理的,因为.NET没有DATE数据类型,只有DATETIME和那个属性会有更多的数据,那么DB2 DATE列会期望.
问题是
为什么.NET基本代码不能使用ToShortDateString()自动转换并提供DB2期望的内容?
在.NET将SQL事务提交给DB2之前,可以使用哪些方法覆盖.NET基本逻辑并在应用程序代码中转换值?
任何帮助或反馈将不胜感激.谢谢!
以下查询:
select convert(datetime, '2016-06-20 7:22:52.728')
给我:
2016-06-20 07:22:52.727
在SQL Server v12.0.4100.1中.
无论我放置几毫秒的值,结果总是少于1毫秒.
我错过了什么或这是一个错误吗?
我们正在针对目标测量实际值.我们有一天(24小时)的总体目标,但我们需要计算任何给定时间的目标来衡量我们目前的进展情况.
显然,我们需要将总体目标与给定时间进行比例分配; 因此,如果是正午,那么渐进目标是每日目标的一半,而在早上6点,渐进目标将是每日目标的四分之一 - 依此类推.
在SQL中执行此操作的最有效方法是什么?有一个明显的解决方案,但它不是很漂亮 - 我希望能够DATETIME在一次操作中将a 转换为总的毫秒数.
我注意到,如果有两个日期时间被认为是相等的
2010-12-31 15:13:48.000
Run Code Online (Sandbox Code Playgroud)
和另外一个
2010-12-31 15:13:48.001.
Run Code Online (Sandbox Code Playgroud)
我在开始时认为它是向上或向下舍入到最接近的整秒,但事实证明
2010-12-31 15:13:48.002
Run Code Online (Sandbox Code Playgroud)
正确记录差异.
知道为什么会这样吗?