C#查询SQL数据库时,遇到时间格式有关问题
C#查询SQL数据库时,遇到时间格式问题
旧的上传到数据库的时间格式:sTime = DateTime.Now.ToString();
出现问题:由于我没有进行格式转换导致不同电脑上传到数据库的时间格式不同。
如:2015-06-16 08:46:22 和 2015-6-16 8:49:02
原因:是不同电脑上面的时间和日期格式不同,以前没有注意到这种情况;
新的上传到数据库的时间格式:sTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
这样确保后面的数据格式统一了,但是数据库中以前的数据两种情况混合;
提问:现数据库中有:2015-06-16 08:46:22 和 2015-6-16 8:49:02 这两种时间格式,我如果想做时间段查询的话怎样才能做到两种格式都能查询到并且没有错误,特别是2015-6-16 8:49:02这种格式,比如我查询6月7号到16号上传的数据,我用:DATETIME>'2015-6-7' AND DATETIME<'2015-6-1623:59' ;这种情况就会出现BUG,因为字符串判断6-7会比6-16大;甚至会出现查询1月11日的数据会出现11月1日的数据;如果以前格式都统一了就不会出现现在这种情况,所以我想请教下各位你们遇到 2015-6-16 8:49:02这种格式是怎么做时间段查询的;或者可能修改数据库中已经上传的数据的格式吗
------解决思路----------------------
你拿字符串作为日期类型……你试着将数据库类型改为DateTime,否则你需要convert
------解决思路----------------------
别做字符串大小比较
换成时间类型.
------解决思路----------------------
根本办法是改数据库字段的数据类型。先添加一个字段,然后将你这个日期的字符串同一转成日期型后保存至新建字段,再删除日期字段,再将新增字段改名同旧日期字段。当然,代码也要做一点修改。
如果不像改字段数据类型,就用convert转换,然后在后面指定日期格式码,比如120,112.
------解决思路----------------------
数据库的column 用时间类型,显示时再转换成字符串。
------解决思路----------------------
如果要求不是很严格,可以按天查询嘛,或者转换成统一格式的字符串(yyyyMMddHHmmss这种)
------解决思路----------------------
不是改历史数据!
按天查询
------解决思路----------------------
你以为date>'2015-10-1' and date<'2015-10-2'就是字符串比较吗
这只是SQL的语法罢了
数据库里的字段是DateTime类型,而不是nvarchar2
------解决思路----------------------
用字符串比较就会出现一个问题
date='2015-10-1'匹配不出结果(即使数据里含有'2015-10-1 0:0:0')
而date>'2015-10-1'则会将'2015-10-1 0:0:0'也匹配出来
旧的上传到数据库的时间格式:sTime = DateTime.Now.ToString();
出现问题:由于我没有进行格式转换导致不同电脑上传到数据库的时间格式不同。
如:2015-06-16 08:46:22 和 2015-6-16 8:49:02
原因:是不同电脑上面的时间和日期格式不同,以前没有注意到这种情况;
新的上传到数据库的时间格式:sTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
这样确保后面的数据格式统一了,但是数据库中以前的数据两种情况混合;
提问:现数据库中有:2015-06-16 08:46:22 和 2015-6-16 8:49:02 这两种时间格式,我如果想做时间段查询的话怎样才能做到两种格式都能查询到并且没有错误,特别是2015-6-16 8:49:02这种格式,比如我查询6月7号到16号上传的数据,我用:DATETIME>'2015-6-7' AND DATETIME<'2015-6-1623:59' ;这种情况就会出现BUG,因为字符串判断6-7会比6-16大;甚至会出现查询1月11日的数据会出现11月1日的数据;如果以前格式都统一了就不会出现现在这种情况,所以我想请教下各位你们遇到 2015-6-16 8:49:02这种格式是怎么做时间段查询的;或者可能修改数据库中已经上传的数据的格式吗
------解决思路----------------------
你拿字符串作为日期类型……你试着将数据库类型改为DateTime,否则你需要convert
------解决思路----------------------
别做字符串大小比较
换成时间类型.
------解决思路----------------------
根本办法是改数据库字段的数据类型。先添加一个字段,然后将你这个日期的字符串同一转成日期型后保存至新建字段,再删除日期字段,再将新增字段改名同旧日期字段。当然,代码也要做一点修改。
如果不像改字段数据类型,就用convert转换,然后在后面指定日期格式码,比如120,112.
------解决思路----------------------
数据库的column 用时间类型,显示时再转换成字符串。
------解决思路----------------------
如果要求不是很严格,可以按天查询嘛,或者转换成统一格式的字符串(yyyyMMddHHmmss这种)
------解决思路----------------------
不是改历史数据!
按天查询
convert(varchar(8),字段名,112) between '20150616' and '20150617'
------解决思路----------------------
别做字符串大小比较
换成时间类型.
我看网上好多人都是用字符串比较。所以...
你以为date>'2015-10-1' and date<'2015-10-2'就是字符串比较吗
这只是SQL的语法罢了
数据库里的字段是DateTime类型,而不是nvarchar2
------解决思路----------------------
用字符串比较就会出现一个问题
date='2015-10-1'匹配不出结果(即使数据里含有'2015-10-1 0:0:0')
而date>'2015-10-1'则会将'2015-10-1 0:0:0'也匹配出来