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. 微服务实战系列(五)-注册中心Eureka与nacos区别

    1. 场景描述 nacos最近用的比较多,介绍下nacos及部署吧,刚看了下以前写过类似的,不过没写如何部署及与eureka区别,只展示了效果,补补吧. 2.解决方案 2.1 nacos与eureka ...

  2. Magicodes.IE之花式导出

    总体设计 Magicodes.IE是一个导入导出通用库,支持Dto导入导出以及动态导出,支持Excel.Word.Pdf.Csv和Html.在本篇教程,笔者将讲述如何使用Magicodes.IE进行花 ...

  3. 推荐条+fragment

    主布局 package com.example.dell.day1215; import android.support.design.widget.TabLayout; import android ...

  4. 你来讲讲AQS是什么吧?都是怎么用的?

    前言 在Java面试的时候,多线程相关的知识是躲不掉的,肯定会被问.我就被问到了AQS的知识,就直接了当的问,AQS知道是什么吧,来讲讲它是怎么实现的,以及哪些地方用到了它.当时自己确实没有讲好,所以 ...

  5. Python-装饰器(语法糖)上下五千年和前世今生

    装饰器上下五千年和前世今生,这里我们始终要问,装饰器为何产生?装饰器产生解决了什么问题?什么样的需求推动了装饰器的产生?思考问题的时候,始终要问,为什么要这样,而不是那样或者其他样.这里我不先说,也不 ...

  6. Python练习题 033:Project Euler 005:最小公倍数

    本题来自 Project Euler 第5题:https://projecteuler.net/problem=5 # Project Euler: Problem 5: Smallest multi ...

  7. 如何用5000行JS撸一个关系型数据库

    首先声明,我不是标题党,我真的是用5000行左右的JS实现了一个轻量级的关系型数据库JSDB,核心是一个SQL编译器,支持增删改查. 源代码放到github上了:https://github.com/ ...

  8. Python3基础——递归

    递归函数 如果一个函数在内部调用自身本身,这个函数就是递归函数. 递归函数的优点是定义简单,逻辑清晰.理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰. 使用递归函数需要注意防止栈 ...

  9. pycharm 解决PEP8问题,配置autopep8到菜单栏

    autopep8是一个可以将Python代码自动排版为PEP8风格第三方包,使用它可以轻松地排版出格式优美整齐的代码.网络上有很多介绍如何在pycharm中配置autopep8的方案,但很多方案中还是 ...

  10. 【linux】基础命令一

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ mount dir[] device[]umount devic[]maste ...