sqlsugar入门(3)-DateTime.ToString("yyyy-MM-dd HH:mm:ss.fff")源码修改
1.注释SqlSugar\ExpressionsToSql\ResolveItems\MethodCallExpressionResolve文件下的GetMethodValue方法
case "ToString":
//if (model.Args.Count > 1 && model.Args.Last().MemberValue.ObjToString().IsContainsIn("-", "/", ":", "yy", "ms", "hh"))
//{
// return GeDateFormat(model.Args.Last().MemberValue.ObjToString(), model.Args.First().MemberName.ObjToString());
//}
//Check.Exception(model.Args.Count > 1, "ToString (Format) is not supported, Use ToString().If time formatting can be used it.Date.Year+\"-\"+it.Data.Month+\"-\"+it.Date.Day ");
return this.Context.DbMehtods.ToString(model);
来支持tostring的解析。
2.修改SqlSugar\ExpressionsToSql\DbMethods\DefaultDbMethod 来支持sqlserver的解析
public virtual string ToString(MethodCallExpressionModel model)
{
if (model.Args.Count == 1)
{
var parameter = model.Args[0];
return string.Format(" CAST({0} AS NVARCHAR(MAX))", parameter.MemberName);
}
else if (model.Args.Count == 2)
{
if (model.Args[0].MemberName.ToString().StartsWith("@"))
{
return string.Format("Format(CAST ({0} as datetime),'{1}')", model.Args[0].MemberName, model.Args[1].MemberValue);
}
else
{
return string.Format("Format({0},'{1}')", model.Args[0].MemberName, model.Args[1].MemberValue);
}
}
return "";
}
3.修改SqlSugar\Realization\MySql\SqlBuilder\MySqlExpressionContext 来支持mysql的解析
public override string ToString(MethodCallExpressionModel model)
{
if (model.Args.Count == 1)
{
var parameter = model.Args[0];
return string.Format(" CAST({0} AS CHAR)", parameter.MemberName);
}
else if (model.Args.Count == 2)
{
var formatstr = model.Args[1].MemberValue.ToString(); if (formatstr.Contains("mm"))
{
formatstr = formatstr.Replace("mm", "%I");
}
else if (formatstr.Contains("m"))
{
formatstr = formatstr.Replace("m", "%i");
} if (formatstr.Contains("yyyy"))
{
formatstr = formatstr.Replace("yyyy", "%Y");
}
else if (formatstr.Contains("yy"))
{
formatstr = formatstr.Replace("yy", "%Y");
}
if (formatstr.Contains("MM"))
{
formatstr = formatstr.Replace("MM", "%m");
}
else if (formatstr.Contains("M"))
{
formatstr = formatstr.Replace("M", "%c");
}
if (formatstr.Contains("dd"))
{
formatstr = formatstr.Replace("dd", "%d");
}
else if (formatstr.Contains("d"))
{
formatstr = formatstr.Replace("d", "%e");
}
if (formatstr.Contains("HH"))
{
formatstr = formatstr.Replace("HH", "%H");
}
else if (formatstr.Contains("hh"))
{
formatstr = formatstr.Replace("hh", "%h");
}
else if (formatstr.Contains("H"))
{
formatstr = formatstr.Replace("H", "%k");
}
else if (formatstr.Contains("h"))
{
formatstr = formatstr.Replace("h", "%l");
} if (formatstr.Contains("ss"))
{
formatstr = formatstr.Replace("ss", "%S");
}
else if (formatstr.Contains("s"))
{
formatstr = formatstr.Replace("s", "%s");
}
var count = formatstr.ToCharArray().Where(o => o == 'f').Count();
if (count > 0)
{
var s = "";
s = s.PadLeft(count, 'f');
formatstr = formatstr.Replace(s, "%f");
count = 6 - count;
} if (count > 0)
{
var s = string.Format("DATE_FORMAT({0},'{1}')", model.Args[0].MemberName, formatstr);
return string.Format("SUBSTR({0},1,LENGTH({0})-{1})", s, count);
}
return string.Format("DATE_FORMAT({0},'{1}')", model.Args[0].MemberName, formatstr);
}
return "";
}
4.修改SqlSugar\Realization\Oracle\SqlBuilder\OracleExpressionContext来支持Oracle的解析
public override string ToString(MethodCallExpressionModel model)
{
if (model.Args.Count == 1)
{
var parameter = model.Args[0];
return string.Format(" CAST({0} AS VARCHAR2(4000))", parameter.MemberName);
}
else if (model.Args.Count == 2)
{
var formatstr = model.Args[1].MemberValue.ToString();
if (formatstr.Contains("MM"))
{ }
else if (formatstr.Contains("M"))
{
formatstr = formatstr.Replace("M", "FMMM");
} if (formatstr.Contains("dd"))
{ }
else if (formatstr.Contains("d"))
{
formatstr = formatstr.Replace("d", "FMdd");
} if (formatstr.Contains("HH"))
{
formatstr = formatstr.Replace("HH", "HH24");
}
else if (formatstr.Contains("H"))
{
formatstr = formatstr.Replace("H", "FMHH24");
} if (formatstr.Contains("hh"))
{ }
else if (formatstr.Contains("h"))
{
formatstr = formatstr.Replace("h", "FMhh");
} if (formatstr.Contains("mm"))
{
formatstr = formatstr.Replace("mm", "mi");
}
else if (formatstr.Contains("m"))
{
formatstr = formatstr.Replace("m", "FMmi");
} if (formatstr.Contains("ss"))
{ }
else if (formatstr.Contains("s"))
{
formatstr = formatstr.Replace("s", "FMss");
}
return string.Format("to_char({0},'{1}')", model.Args[0].MemberName, formatstr);
}
return "";
}
5.查看是否按指定格式进行解析
var ssc = SqlFuncEx.GetDB("server=127.0.0.1;database=SQLSUGAR4XTEST;uid=sa;pwd=123456");
var sql = ssc.Queryable<Student>()
.Where(o => o.CreateTime.Value.ToString("yyyy-MM-dd HH:mm:ss.fff") == "2020-10-11 18:38:05.820")
.ToSqlString(); var sscmy = SqlFuncEx.GetDB("server=127.0.0.1;database=SQLSUGAR4XTEST;uid=sa;pwd=123456", DbType.MySql);
var sql1 = sscmy.Queryable<Student>()
.Where(o => o.CreateTime.Value.ToString("yyyy-MM-dd HH:mm:ss.fff") == "2020-10-11 18:38:05.820")
.ToSqlString(); var ssco = SqlFuncEx.GetDB("server=127.0.0.1;database=SQLSUGAR4XTEST;uid=sa;pwd=123456", DbType.Oracle);
var sql2 = ssco.Queryable<Student>()
.Where(o => o.CreateTime.Value.ToString("yyyy-MM-dd HH:mm:ss.fff") == "2020-10-11 18:38:05.820")
.ToSqlString();
6.Demo地址:https://gitee.com/xuanyun2018/sqlsugardemo.git
解析代码写的有些简陋如有纰漏请自行修改。下一章节修改源码支持多主键保存。
sqlsugar入门(3)-DateTime.ToString("yyyy-MM-dd HH:mm:ss.fff")源码修改的更多相关文章
- 小程序日期格式(yyyy-MM-dd HH:mm:ss)转(yyyy/MM/dd HH:mm:ss)
let newDate = (date).replace(/-/g, '/'); var date = new Date(newDate).getTime();
- Oracle中把一个DateTime的字符串转化成date类型。to_date('2016/12/8 18:55:43','yyyy/MM/dd hh24:mi:ss'),
Oracle中把一个DateTime或者该形态字符串转化成date类型. to_date('2016/12/8 18:55:43','yyyy/MM/dd hh24:mi:ss'), 或者: sele ...
- java 日期格式转换EEE MMM dd HH:mm:ss z yyyy
SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy", Locale. ...
- Spring Boot从入门到精通(五)多数据源配置实现及源码分析
多数据源配置在项目软件中是比较常见的开发需求,Spring和Spring Boot中对此都有相应的解决方案可供大家参考.在Spring Boot中,如MyBatis.JdbcTemplate以及Jpa ...
- openlayers4 入门开发系列之地图导航控件篇(附源码下载)
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- leaflet-webpack 入门开发系列四图层控件样式优化篇(附源码下载)
前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...
- Entity Framework7 入门之全功能.NET版本下使用EF7(含源码)另附数据迁移常见错误处理
Entity Framework7 入门之全功能.NET(Console, WinForms, WPF等)使用EF7 昨天,我们介绍了EF的新特性和开发计划,如果你还不了解,请移步 Entity Fr ...
- C++入门教程:大白话讲解,新手基础篇⭐⭐⭐(附源码及详解、视频课程资料推荐)
目录 C++教程 前言 视频教程 文字教程 集成开发环境(IDE) 编译器 工作原理 学习指南 入门书籍 进阶书籍 算法.竞赛书籍 教程 标准构建 程序解释 第一个C++程序--"hello ...
- arcgis api 3.x for js 入门开发系列十四最近设施点路径分析(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
随机推荐
- 什么是64位和32位internet explorer
什么是64位和32位internet explorer 如果您使用 64 位版本的 Internet Explorer 时,您会遇到问题,请尝试使用 32 位版本的 Internet Explorer ...
- uBuntu安装其他版本Python
问题描述:阿里云服务器uBuntu版本为16.04,默认Python版本为2.7.12和3.5.2,但是FastAPI,仅支持3.6+版本,因此需要更高版本的Python. 注意:系统自带的Pytho ...
- c++ 在window下创建窗口的基本步骤
1. WinMain 函数的定义: 2. 创建一个窗口 2.1 设计一个窗口类 WNDCLASS 2.2 注册窗口类 2.3 创建窗口 2.4 显示及更新窗口 3. 进行消息循环 BOOL GetMe ...
- Oracle Database XE 11gR2 SQL 命令行的显示调整
操作系统:Windows 10 x64 Oracle Database XE 11gR2 参考:在cmd命令行使用sqlplus时的页面显示问题 通过 cmd 命令行或运行 SQL 命令行查看一张表的 ...
- spring-boot-route(十)多数据源切换
前面我们已经介绍了三种方式来操作数据库,在实际开发中,往往会出现一个服务连接多个数据库的需求,这时候就需要在项目中进行灵活切换数据源来完成多个数据库操作.这一章中,我们使用jdbcTemplate来学 ...
- dockerfile解析过程
什么是dockerfile? DockerFile是用来构建docker镜像的文件,是由一系列命令和参数组成. 构建步骤? 1.编写dockerfile文件 2.docker build 3.dock ...
- Jersey实现跨服务器上传图片:UniformInterfaceException:403 Forbidden
jersey.api.client.UniformInterfaceException :returned a response status of 403 Forbidden 图片服务器:端口808 ...
- 多测师讲解接口自动化测试 _requests_高级讲师肖sir
rep=requests.post 错误方法: 1.在代理中---把高级中----代理-----去除勾选,调用失败
- day32 Pyhton hashlib模块 总结异常处理
一.当用明文密码进行信息存储的时候,会导致密码的泄露,如何解决问题 通过导入hashlib模块,利用里面存在的算法对字符串进行加密计算得到一串密文的结果 1.这个过程不可逆 2.对于同一个字符串,同一 ...
- 使用notepad++的nppexec插件格式化json和压缩json内容
1.遇到问题 因为平时需要查看json内容,有时候修改后需要压缩json,虽然已经有网页可以实现,但每次打开网页也很麻烦啊.虽然notpad++也有NPPJSONViewer这个插件,但是目前只有格式 ...