首页 > 数据库 >Kingbase中手写Mysql底层函数DATE_FORMAT()

Kingbase中手写Mysql底层函数DATE_FORMAT()

时间:2023-09-13 21:06:16浏览次数:42  
标签:upper FORMAT MySQL Kingbase 组件 日期 Mysql 字符串

Kingbase中手写Mysql底层函数DATE_FORMAT()

分析底层函数的实现逻辑

MySQL 的 DATE_FORMAT() 函数其底层逻辑涉及多个组件和模块。以下是 DATE_FORMAT() 函数的大致实现逻辑:

  1. 解析日期格式字符串:DATE_FORMAT() 函数接受两个参数,一个是日期值,另一个是格式字符串。首先,MySQL 解析格式字符串,并确定需要格式化的日期组件(年、月、日、小时等)以及它们的顺序和格式。

  2. 提取日期组件:根据格式字符串的指示,MySQL 从日期值中提取相应的日期组件。例如,如果格式字符串包含 "%Y",表示需要提取年份;如果包含 "%m",表示需要提取月份。

  3. 格式化日期组件:根据提取的日期组件和格式字符串的要求,MySQL 将日期组件转换为相应的字符串表示。例如,将月份转换为两位数的字符串,将年份转换为四位数的字符串等。

  4. 组合格式化后的日期组件:MySQL 将格式化后的日期组件按照格式字符串的指示进行组合,形成最终的日期字符串表示。

总体而言,DATE_FORMAT() 函数的底层实现涉及字符串解析、日期组件提取、字符串格式转换等操作。实现细节查看 MySQL 的源代码。

MySQL 是一个复杂的软件系统,其源代码包含多个模块和组件,涉及多种编程语言(如 C++、C、Java 等)。要深入了解 DATE_FORMAT() 函数的底层实现,需要仔细研究 MySQL 的源代码,并查看与日期格式化相关的模块和函数。

手写函数

CREATE OR REPLACE FUNCTION date_format(indate anyelement, intext text)
 RETURNS text
 LANGUAGE plpgsql
AS $function$
BEGIN
IF upper(inText) = upper('%Y-%m-%d %H:%i') THEN
return to_char(inDate,'YYYY-MM-DD HH24:MI');
END IF;
IF upper(inText) = upper('%Y-%m-%d %H:%i:%S') THEN
return to_char(inDate,'YYYY-MM-DD HH24:MI:SS');
END IF;
IF upper(inText) = upper('%H:%i:%S') THEN
return to_char(inDate,'HH24:MI:SS');
END IF;
IF upper(inText) = upper('%Y-%m-%d') THEN
return to_char(inDate,'YYYY-MM-DD');
END IF;
IF upper(inText) = upper('%Y-%m') THEN
return to_char(inDate,'YYYY-MM');
end if;
IF upper(inText) = upper('%Y') THEN
return to_char(inDate,'YYYY');
END IF;
return '';
END;
$function$

将上述函数在kingbase中运行后,就可以实现和mysql的DATE_FORMAT() 函数有相同的功能。

标签:upper,FORMAT,MySQL,Kingbase,组件,日期,Mysql,字符串
From: https://blog.51cto.com/u_15399050/7463595

相关文章

  • 仓库管理系统WarehouseInformation类
    packagedemo3;publicclassWarehouseInformation{privateStringitemnumnow;privateStringitemname;privateStringsuppliername;privateStringwarehousingtime;privateStringshipmenttime;privateStringwarehousenumber;pr......
  • ubuntu安装mysql8
    默认安装5.x版本sudoaptinstallmysql-server安装8.x版本,请继续往下看:https://dev.mysql.com/downloads/repo/apt/查看最新的mysql版本apt-getupdatewgethttps://repo.mysql.com//mysql-apt-config_0.8.26-1_all.debdpkg-imysql-apt-config_0.8.26-1_all.debapt-ge......
  • ubuntu卸载mysql
    1、停止MySQL服务器sudoservicemysqlstop2、卸载MySQL服务器软件包sudoapt-getpurgemysql-server3、删除MySQL配置文件和数据sudorm-rf/etc/mysql/var/lib/mysql4、清理残留文件和目录sudoapt-getautoremovesudoapt-getautoclean   ......
  • MySql数据库中,对于同一个表,如果直接把查询结果赋值给待更新字段,则会出现锁表的情况。
    MySql数据库中,对于同一个表,如果直接把查询结果赋值给待更新字段,则会出现锁表的情况。原因是:mysql在from子句中遇到子查询时,先执行子查询并将结果放到一个临时表中,我们通常称它为“派生表”;临时表是没有索引、无法加锁的。update时,会锁表,此时不能再select。所以会报错,此时如果将......
  • MySQL中EXPLAIN用法和结果分析
    可以查看:[MySQL高级](一)EXPLAIN用法和结果分析_mysqlexplain_王洪玉的博客-CSDN博客重点信息截图: ......
  • mysql中information_schema.columns字段说明
    语句如下:SELECT *FROM information_schema.COLUMNSWHERE TABLE_SCHEMA='具体某个数据库';各字段含义如下:字段含义table_schema 表所有者(对于schema的名称)table_name 表名column_name 列名ordinal_position 列标识号column_default 列的默认值is_nullable 列的为空性......
  • MySQL 字段根据逗号分割实现列转行
    表数据: 期望数据:实现sql:selecta.id,b.help_topic_id+1,a.execute_name,#substring_index(a.execute_name,',',b.help_topic_id+1),substring_index(substring_index(a.execute_name,',',b.help_topic_id+1),',',-1)from`user`aleft......
  • MySQL为什么改进LRU算法
    LRU算法概念介绍LRU(LeastRecentlyUsed,最近最少使用)算法是一种用于缓存管理的常见算法。它的核心思想是:当需要淘汰(替换)一个数据时,选择最长时间未被访问的数据进行淘汰,即选择最近最少使用的数据。以下是LRU算法的概念介绍和基本工作原理:缓存管理:LRU算法通常用于管理缓存中的数据。......
  • 完美解决MySQL ERROR:Access denied for user `root`@`localhost` (using password:YE
    windows找到mysql安装目录下的my.ini,并在最后一行添加skip-grant-tableslinux目录为etc/my.cnf在最后一行添加skip-grant-tables 1、输入mysql-uroot-p  然后回车2、输入usemysql; 3、输入updateusersetpassword=password("这里填写要设置的密码")whereuser=......
  • MySQL篇:bug1_navicat添加外键保存后不起作用(消失)
    问题在Nacicatpremium中添加外键一保存就消失用SQL语句也显示创建成功,没有报错,可是在INSERT中又起不到约束作用解决办法参考一下资料发现可能是表的类型不支持外键要在MySQL声明外键,用户应该紧记几个要点:两个表必须是InnoDB类型。在参考的表,必须有一个索引,参考的列被......