最近做项目需要支持动态查询条件(界面上的查询条件不固定,可以自定义配置),为了简化后端代码处理,使用了Linq查询表达式来动态生成sql语句。
查询表达式确实好用,但是在处理DateTime类型遇到了以下的错误:
从字符串转换日期和/或时间时,转换失败。
如下图:
通过生成出来的sql语句可以看出,日期值自动转换后的毫秒部分有000000(7个0),导致sql语句不能将其识别为有效的日期格式,从而产生了SqlException。
原因推断:
起初以为是前端传入的日期格式问题(通过Swagger接口文档进行测试,默认生成的日期是UTC含时区格式的),在后端接收日期后进行了本地格式化,发现依然报上面的错误。。。
从而可以推断是Linq查询表达式生成SQL语句时进行了日期的转换(
默认转换为DateTime2的日期格式
),而非前端入参格式错误。既然如此,那肯定是可以在哪里进行配置,来改变这种默认的日期格式转换。
解决办法:
QueryTime字段在数据库表中的类型是datetime,因此我们只需要给该日期属性标记一个在数据库表中的实际类型就好了,如下:
[Column(TypeName = "datetime")]
public DateTime? QueryTime { get; set; }
这样Linq查询表达式生成SQL语句时就会按照指定的数据库字段格式进行日期转换,如下图:
QueryTime属性的值被转换成了datetime格式(毫秒部分是000(3个0)),这样SQL语句就可以愉快的执行了。。。
背景:最近做项目需要支持动态查询条件(界面上的查询条件不固定,可以自定义配置),为了简化后端代码处理,使用了Linq查询表达式来动态生成sql语句。问题:查询表达式确实好用,但是在处理DateTime类型遇到了以下的错误:从字符串转换日期和/或时间时,转换失败。如下图:通过生成出来的sql语句可以看出,日期值自动转换后的毫秒部分有000000(7个0),导致sql语句不能将其识别为有效的日期格式,从而产生了SqlException。原因推断:起初以为是前端传入的日期格式问题(通.
错误出现:导入数据时出现“Sql
DateTime
溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM之间。”
出现这种问题多半是因为你插入或者更新数据库时
datetime
字段值为空默认插入0001年01月01日造成
datetime
类型溢出。
原因分析:
关于
DateTime
,在将
DateTime
类型,插入到数据库的时候,最容易出现的一种错误:“Sql
DateTime
溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间”原因是我们在取
DateTime
.MinValue的值,并插
//获取上一个月
DateTime
date =
DateTime
.Now.AddMonths(-1);
int count = _context.students.Where(q =>
q.sbirthday.Value.Yea
今天遇到一个奇葩的问题,用
ef
的方式
查询
数据库的时候带出的日期是"年月日 时分秒"格式的。客户说需要把时分秒去掉,我想当然的答应了,觉得不就是一个日期格式化嘛,没什么大不了。结果,现实一巴掌把我抽的晕头转向。
不说其它,上代码:
private void BoundData()
MySQL中的
datetime
是一种日期时间数据类型,它可以用来表示日期和时间。
在MySQL中,可以使用SELECT语句
查询
datetime
类型的数据。例如,假设有一个名为table_name的表,其中有一个名为column_name的列,它的数据类型为
datetime
。可以使用以下语句
查询
该列中的数据:
SELECT column_name FROM table_name;
这将返回列中的所有
datetime
值。如果要仅返回符合特定条件的值,可以使用WHERE子句。例如,以下
查询
将返回所有2019年1月1日之后的值:
SELECT column_name FROM table_name WHERE column_name > '2019-01-01';
需要注意的是,
datetime
类型的数据在MySQL中存储为YYYY-MM-DD HH:MM:SS格式的字符串,其中YYYY表示年份,MM表示月份,DD表示日期,HH表示小时,MM表示分钟,SS表示秒数。因此,可以将
datetime
值与其他字符串一样进行比较和操作。