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 各个类 ...
随机推荐
- Git的使用--码云
Git的使用--码云 进入码云官网:https://gitee.com/ 注册or登录账号进入gitee页面(页面结构大同小异). 点击右上角加号--新建仓库,用于存放项目代码 创建项目需要注意的选项 ...
- Spring源码系列(四)--spring-aop是如何设计的
简介 spring-aop 用于生成动态代理类(底层是使用 JDK 动态代理或 cglib 来生成代理类),搭配 spring-bean 一起使用,可以使 AOP 更加解耦.方便.在实际项目中,spr ...
- GAN生成的评价指标 Evaluation of GAN
传统方法中,如何衡量一个generator ?-- 用 generator 产生数据的 likelihood,越大越好. 但是 GAN 中的 generator 是隐式建模,所以只能从 P_G 中采样 ...
- [C#.NET 拾遗补漏]09:数据标注与数据校验
数据标注(Data Annotation)是类或类成员添加上下文信息的一种方式,在 C# 通常用特性(Attribute)类来描述.它的用途主要可以分为下面这三类: 验证 Validation:向数据 ...
- Fedora version history --- kernel version
Fedora version history https://en.wikipedia.org/wiki/Fedora_version_history Version (Code name)[ ...
- 利用babel工具将es6语法转换成es5,Object.assign方法报错
一.新建工程初始化项目 1.新建工程文件夹这里起名叫做es6,然后在里面创建两个文件夹分别为src .dist如下图:(src为待转换es6 js存放目录,dist为编译完成后的es5 js存放目录) ...
- 利用HDFS实现ElasticSearch7.2容灾方案
利用HDFS实现ElasticSearch7.2容灾方案 目录 利用HDFS实现ElasticSearch7.2容灾方案 前言 快照版本兼容 备份集群 HDFS文件系统 软件下载 JDK环境 配置系统 ...
- 多测试_mysql数据库_09
什么是数据库? 是存放数据的电子仓库.以某种方式存储百万条,上亿条数据,供多个用户访问共享. 每个数据库都有一个或多个不同的api用于创建.访问,管理和复制所保存的数据. 数据库分关系型数据库和非关系 ...
- 1、微信小程序开发介绍。
微信小程序如何能达到快速的开发效果,下面首先介绍一下需要的框架,使用这些框架可以减少大部分编写代码时间. 微信小程序使用的框架:weui开源框架 后端数据使用的框架(包含管理和api接口框架):YiS ...
- java怎么产生随机数
随机数的产生在一些代码中很常用,也是我们必须要掌握的.而java中产生随机数的方法主要有三种: 第一种:new Random() 需要借助java.util.Random类来产生一个随机数发生器,也是 ...