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

    RDD提供了一个抽象的数据架构,我们不必担心底层数据的分布式特性,只需将具体的应用逻辑表达为一系列转换处理,不同RDD之间的转换操作形成依赖关系,可以实现管道化,从而避免了中间结果的存储,大大降低了数 ...

  2. CentOS 7安装Nginx 1.10.2

    安装epel-release源并进行安装 yum install epel-release yum update(时间会有点长) yum install nginx 相关操作: systemctl s ...

  3. C++实现串口通信问题(与Arduino)

    参考1(已验证稍加修改可与Arduino通信):https://blog.csdn.net/qq_36106219/article/details/81701368 参考2(比较全,main函数需要自 ...

  4. 《C++primerplus》第11章练习题

    1.修改程序清单11.5(随机漫步),使之以特定的格式将结果写入文件中. //vector.h -- Vector Class #ifndef _VECTOR_H_ #define _VECTOR_H ...

  5. Keil ARm新建项目

    一.新建一个工程 选好芯片后确认,完成创建 二.新建一个文件 保存为后缀名为*.c的文件 三.把文件添加进项目里面 四.测试 发现有警告 五.给项目添加特定的文件,去除警告或错误 现在保存项目的文件夹 ...

  6. NOI 2011 【阿狸的打字机】

    之前讲了[AC自动姬],今天我终于把这题给刚下来了...嗯,来给大家讲一讲. 题目描述: 打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母.经阿狸研究发现,这个打字机是这样工 ...

  7. Oracle 数据库创建表空间、创建用户

    创建表空间 create temporary tablespace user_name_temp tempfile '/oradata/ORA11G/user_name_temp.dbf' size ...

  8. docker-管理镜像常用命令

    1. docker管理镜像常用命令 指令 说明 docker   run     [容器 CONTAINER ID] 创建一个新的容器并运行一个命令 docker   start   [容器 CONT ...

  9. 微信小程序 audio组件 默认控件 无法隐藏/一直显示/改了controls=‘false’也没用2019/5/28

    <audio>默认控件,如果需要隐藏,不需要特意设置controls = 'false',直接把这个属性删除即可,不然无论如何都会存在 之前,设置了controls = 'false' & ...

  10. Jenkins环境搭建(7)-集成钉钉消息推送

    在去年的时候,搭建了一套Jenkins环境,基本功能已实现,可以通过如下地址查阅. Jenkins环境搭建(1)-下载与安装 Jenkins环境搭建(2)-搭建jmeter+ant+jenkins自动 ...