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")源码修改的更多相关文章

  1. 小程序日期格式(yyyy-MM-dd HH:mm:ss)转(yyyy/MM/dd HH:mm:ss)

    let newDate = (date).replace(/-/g, '/'); var date = new Date(newDate).getTime();

  2. 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 ...

  3. java 日期格式转换EEE MMM dd HH:mm:ss z yyyy

    SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy", Locale. ...

  4. Spring Boot从入门到精通(五)多数据源配置实现及源码分析

    多数据源配置在项目软件中是比较常见的开发需求,Spring和Spring Boot中对此都有相应的解决方案可供大家参考.在Spring Boot中,如MyBatis.JdbcTemplate以及Jpa ...

  5. openlayers4 入门开发系列之地图导航控件篇(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  6. leaflet-webpack 入门开发系列四图层控件样式优化篇(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...

  7. Entity Framework7 入门之全功能.NET版本下使用EF7(含源码)另附数据迁移常见错误处理

    Entity Framework7 入门之全功能.NET(Console, WinForms, WPF等)使用EF7 昨天,我们介绍了EF的新特性和开发计划,如果你还不了解,请移步 Entity Fr ...

  8. C++入门教程:大白话讲解,新手基础篇⭐⭐⭐(附源码及详解、视频课程资料推荐)

    目录 C++教程 前言 视频教程 文字教程 集成开发环境(IDE) 编译器 工作原理 学习指南 入门书籍 进阶书籍 算法.竞赛书籍 教程 标准构建 程序解释 第一个C++程序--"hello ...

  9. arcgis api 3.x for js 入门开发系列十四最近设施点路径分析(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

随机推荐

  1. PHP代码审计02之filter_var()函数缺陷

    前言 根据红日安全写的文章,学习PHP代码审计审计的第二节内容,题目均来自PHP SECURITY CALENDAR 2017,讲完这个题目,会有一道CTF题目来进行巩固,外加一个实例来深入分析,想了 ...

  2. IDEA 使用的配置

    IDEA 使用 工欲善其事必先利其器,选择适合自己的 IDE,会让自己事倍功半.作为 Java 开发环境,有人喜欢 Eclipse,有人喜欢 idea,这其中的差别对比这里不做对比,需要了解的朋友可以 ...

  3. visual studio 2015 安装MSDN全称Microsoft Developer Network 安装离线的MSDN

    MSDN: 微软向开发人员提供的一套帮助系统,其中包含大量的开发文档,技术文章和示例代码. 这里介绍了vs2015 装离线的MSDN(说明一点是,如果不行,说明你的文件有缺陷,没安装好,之前我用vs2 ...

  4. 关于arduino与SPI

    参考: 作者:李俊轩   来源:本站原创   点击数:x  更新时间:2013年07月18日   [字体:大 中 小]   SPI的英文全称是:"Serial Peripheral Inte ...

  5. 刷LeetCode的简易姿势

    近期抽空刷了刷LeetCode,算是补补课. 由于不是很习惯直接在网页上Coding&Debug,所以还是在本地环境下进行编码调试,觉得基本OK后再在网页上提交. 主要采用Python3进行提 ...

  6. VS Code 搭建编写Shell环境(WSL)

    安装过程 Win10开启WSL,方法略 安装VSCode,方法略 安装语法提示插件:shellman 安装格式化插件:shell-format(右键 -> 格式化文档(Ctrl + Alt + ...

  7. 4-K8S 部署Java应用及应用程序生命周期管理

    1.在kubernetes中部署应用程序流程 准备项目源码-->编译构建-->产出war包,打包到镜像中-->推送到镜像仓库 获取源代码是开发人员提交代码的代码托管地址,有Git.S ...

  8. PHP的学习(提前学习了,业余爱好) (一)

    一个函数一个函数地堆 strstr()函数 在本地测试的时候,代码与显示如下 1.代码: <?php echo strstr("I love Shanghai!123",&q ...

  9. 在Linux命令行内的大小写转换

    在编辑文本时大小写常常是需要注意的地方,大小写的转换是很枯燥而繁琐的工作,所幸,Linux 提供了很多能让这份工作变得容易的命令.接下来让我们看看都有哪些完成大小写转换的命令. tr 命令 tr (t ...

  10. Unix中使用MeteoInfo - Xmanager设置

    通过Xshell等客户端登陆Unix系统运行图形软件(X11)需要有X-server,Xmanager是其中的佼佼者(可惜是商业软件).我通常用Xshell登陆气象局的IBM高性能计算机(AIX系统) ...