细节问题:ZEROFILL的用法范围。

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介:
1、zerofill把月份中的一位数字比如1,2,3等加前导0

mysql> CREATE TABLE t1 (year YEAR(4), month INT(2) UNSIGNED ZEROFILL,
    -> day INT(2) UNSIGNED ZEROFILL);
Query OK, 0 rows affected (0.11 sec)

mysql> INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2)
    -> (2000,2,23),(2000,2,23);
Query OK, 6 rows affected (0.03 sec)
Records: 6 Duplicates: 0 Warnings: 0

mysql> select * from t1;
+------+-------+------+
| year | month | day |
+------+-------+------+
| 2000 | 01 | 01 |
| 2000 | 01 | 20 |
| 2000 | 01 | 30 |
| 2000 | 02 | 02 |
| 2000 | 02 | 23 |
| 2000 | 02 | 23 |
+------+-------+------+
6 rows in set (0.02 sec)

2、如果有这样的需求:一个字段宽度为6个字符,不足的补零,而且又要自动增加。MYSQL现在好像还没有提供这样的功能,这里我用存储过程来实现。

创建表:
Table   Create Table                                                                           
------  ---------------------------------------------------------------------------------------
lk14    CREATE TABLE `lk14` (                                                                  
          `id` int(6) unsigned zerofill NOT NULL DEFAULT '000000',                             
          `str` char(40) DEFAULT NULL,                                                         
          PRIMARY KEY (`id`)                                                                   
        ) ENGINE=MyISAM DEFAULT CHARSET=gb2312 ROW_FORMAT=DYNAMIC COMMENT='InnoDB free: 0 kB'  


创建SP:

DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`sp_zerofill`$$

CREATE PROCEDURE `test`.`sp_zerofill`(IN num int)
BEGIN
  declare i int default 1;
  -- initialization value
  set @sqltext = 'insert into lk14 values(0,''char0'')';
  -- begin while
  while i < num do
    set @sqltext = concat(@sqltext,',','(',i,',''char',ceil(num*rand()),''')');
    set i = i + 1;
  end while;
  -- begin dynamic sql
  prepare s1 from @sqltext;
  execute s1;
  deallocate prepare s1;
END$$

DELIMITER ;

调用结果:

call sp_zerofill(6);

select * from lk14 order by id;


query result(6 records)

id str
000000 char0
000001 char2
000002 char2
000003 char2
000004 char3
000005 char5




本文转自 david_yeung 51CTO博客,原文链接:http://blog.51cto.com/yueliangdao0608/81306,如需转载请自行联系原作者

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
存储 Kubernetes NoSQL
无锁队列实现及使用场景
无锁队列实现及使用场景
|
Linux 网络架构
Linux 中查看本机的子网掩码和网关
Linux 中查看本机的子网掩码和网关
io_uring之liburing库安装
io_uring之liburing库安装
1165 0
|
Web App开发 存储 数据可视化
Linux内存管理神器:smem工具
Linux内存管理神器:smem工具
1103 0
Linux内存管理神器:smem工具
|
存储 Go
No.13 golang中channel(管道)常见使用场景?(上)
No.13 golang中channel(管道)常见使用场景?
378 0
|
Go 网络安全 开发工具
终极攻略!go get命令使用教程
终极攻略!go get命令使用教程
4219 0
|
缓存 Java
深入解析 Java 中的 OutputStream:输出流的精髓揭秘
在 Java 编程中,输出流(OutputStream)是一个关键概念,它为我们提供了一种向目标写入数据的方法。无论是写入文件、网络数据还是其他输出目标,OutputStream 都是实现数据输出的不可或缺的工具。本文将带您深入探索 Java 中的 OutputStream,揭示其原理、用法以及在实际开发中的应用。
|
安全 网络协议 Linux