Access使用datediff的奇怪问题

火星大能猫 2011-09-21 02:23:12
sql语句



SELECT *,datediff('s',SampleDate,'2011-9-21 13:50:57') FROM Report_ChineseCheck
ORDER BY ID DESC

//查询结果
Expr1000 ID SampleDate SampleID PatientName CHNO
-1 1920 2011-9-21 13:50:57 005 0914 003
14 1919 2011-9-21 13:50:42 004 0914 003
1822 1918 2011-9-21 13:20:35 003 245 001
1831 1917 2011-9-21 13:20:25 002 245 001
49857 1916 2011-9-21 0:00:00 001 245 001


第一条记录,SampleDate字段命名就是2011-9-21 13:50:57
为什么datediff算出来会有误差一秒呢?
真是奇怪了.
该字段的数据类型就是日期/时间类型,怪了
...全文
292 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2011-09-22
  • 打赏
  • 举报
回复
检查你的C#程序中的变量处理。应该不是数据库侧的问题,估计是你的C#中对数字进行了转换。注意使用数据的类型和精度。
火星大能猫 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 wwwwb 的回复:]

不过对于转换成字符串后会出现偏差:是用FORMAT?
[/Quote]

对对对,发现问题了.
如果我新增的时候,使用参数并指定为日期类型插入
如下

OleDbParameter[] parameters = {
new OleDbParameter("OLEDBSampleDate", OleDbType.Date),


插入的时候就会有偏差
如果使用字符串参数插入,就不会有偏差了.
所谓的偏差就是format格式化字符串值跟直接select Sampledate的偏差.
wwwwb 2011-09-22
  • 打赏
  • 举报
回复
不过对于转换成字符串后会出现偏差:是用FORMAT?
火星大能猫 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 wwwwb 的回复:]

用FORMAT转换成字符型
[/Quote]
非常感谢,不过对于转换成字符串后会出现偏差,实在百思不得其解.
貌似这样的问题在sqlserver上没有啊.
wwwwb 2011-09-21
  • 打赏
  • 举报
回复
用FORMAT转换成字符型
火星大能猫 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wwwwb 的回复:]

在你的代码中运行
select format(sampleDAte,'yyyy-mm-dd hh:mm:ss') from ....
结果如何
[/Quote]

这样就正确了!!!!
为什么呢
火星大能猫 2011-09-21
  • 打赏
  • 举报
回复
哎.找不到问题.
火星大能猫 2011-09-21
  • 打赏
  • 举报
回复

/// <summary>
/// 获得数据列表
/// </summary>
public DataSet GetList(string strWhere)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select * ");
strSql.Append(" FROM Report_ChineseCheck ");
if (strWhere.Trim() != "")
{
strSql.Append(" where 1=1 and " + strWhere);
}
return DBHelperOleDb.Query(strSql.ToString());
}


代码就这么一个,还有where条件,
然后


DataSet ds = new Report_ChineseCheckManager().GetList(strWhere);

dgvPatientList.DataSource = ds.Tables[0];




wwwwb 2011-09-21
  • 打赏
  • 举报
回复
在你的代码中运行
select format(sampleDAte,'yyyy-mm-dd hh:mm:ss') from ....
结果如何
火星大能猫 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wwwwb 的回复:]

不会吧
Expr1000 ID SampleDate SampleID
-1 1920 2011-9-21 13:50:58 005
14 1919 2011-9-21 13:50:43 004

在ACCESS中运行的结果,你在ACCESS中运行看看结果
[/Quote]

access里运行查询没有问题
但是,使用了好几个第三方查询分析器,以及.NET的adonet,查询结果都有一定的误差.真是杯具了.
wwwwb 2011-09-21
  • 打赏
  • 举报
回复
你的代码是什么,估计是代码中转换问题
火星大能猫 2011-09-21
  • 打赏
  • 举报
回复
哎..而且还没有规律
access直接查看的值
SampleDate
2011-9-21 13:20:26
2011-9-21 13:20:35
2011-9-21 13:50:43
2011-9-21 13:50:58
用工具或者C#里查询出来的值
sampleDAte
2011-9-21 13:20:25
2011-9-21 13:20:35
2011-9-21 13:50:42
2011-9-21 13:50:57
wwwwb 2011-09-21
  • 打赏
  • 举报
回复
不会吧
Expr1000 ID SampleDate SampleID
-1 1920 2011-9-21 13:50:58 005
14 1919 2011-9-21 13:50:43 004

在ACCESS中运行的结果,你在ACCESS中运行看看结果
火星大能猫 2011-09-21
  • 打赏
  • 举报
回复
晕了,数据库打开看是2011-9-21 13:50:58,用sqldbx查询出来时57!!!
显示到DataGridview也是57秒!!
wwwwb 2011-09-21
  • 打赏
  • 举报
回复
你将此字段宽度拉开一点即可看到全部内容
火星大能猫 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wwwwb 的回复:]

SELECT *,datediff('s',SampleDate,'2011-9-21 13:50:57') FROM Report_ChineseCheck
ORDER BY ID DESC
第1条记录为-1,其SampleDat为:2011-9-21 13:50:58
[/Quote]
晕了,我这边记录查询出来时2011-9-21 13:50:5
火星大能猫 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wwwwb 的回复:]

用你的数据测试了一下,没有此问题,结果为0,
上传你的MDB到www.access911.net/csdn
只要有问题的表、查询,用WINRAR压缩
[/Quote]
已经上传到115网盘

SELECT *,datediff('s',SampleDate,#2011-9-21 13:50:57#) FROM Report_ChineseCheck ORDER BY ID DESC
wwwwb 2011-09-21
  • 打赏
  • 举报
回复
SELECT *,datediff('s',SampleDate,'2011-9-21 13:50:57') FROM Report_ChineseCheck
ORDER BY ID DESC
第1条记录为-1,其SampleDat为:2011-9-21 13:50:58
火星大能猫 2011-09-21
  • 打赏
  • 举报
回复
http://115.com/file/e6vouavv#
Maglumi.zip

楼上的地址无法上传,
麻烦您看一下,谢谢了.
wwwwb 2011-09-21
  • 打赏
  • 举报
回复
用你的数据测试了一下,没有此问题,结果为0,
上传你的MDB到www.access911.net/csdn
只要有问题的表、查询,用WINRAR压缩

7,713

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧