- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有发票编号的表格。准则规定数字应包含 6 位或更多位数字。首先尝试做:
UPDATE t1 SET NUMER=CONCAT('00000',NUMER) WHERE LENGTH(NUMER)=1;
UPDATE t1 SET NUMER=CONCAT('0000',NUMER) WHERE LENGTH(NUMER)=2;
UPDATE t1 SET NUMER=CONCAT('000',NUMER) WHERE LENGTH(NUMER)=3;
UPDATE t1 SET NUMER=CONCAT('00',NUMER) WHERE LENGTH(NUMER)=4;
UPDATE t1 SET NUMER=CONCAT('0',NUMER) WHERE LENGTH(NUMER)=5;
但这不是高效的,甚至是不漂亮的。我尝试了 LPAD
函数,但随后出现了问题,因为函数:
UPDATE t1 SET NUMER=LPAD(NUMER,6,'0') WHERE CHAR_LENGTH(NUMER)<=6 ;
返回受影响的零行。还用谷歌搜索,他们说将零放入引号可以解决问题,但没有任何帮助吗?每天导入。
编辑:列 NUMER 是 INT(19) 并且已经包含如下数据:
NUMER
----------
1203
12303
123403
1234503
...
(此时已经填充了3到7位不同长度的数据)
最佳答案
我认为您应该考虑到,您阅读的指南适用于应如何显示 发票,而不是应如何在数据库中存储。
当一个数字存储为 INT 时,它就是一个纯数字。如果在前面加零,再存储一次,还是一样的数。
您可以按如下方式选择 NUMER 字段,或为该表创建一个 View :
SELECT LPAD(NUMER,6,'0') AS NUMER
FROM ...
或者,与其在从数据库中选择数据时更改数据,不如考虑在显示时用零填充数字,并且仅在显示时才进行填充。
我认为您对历史数据保持不变的要求尚无定论。即使是历史数据,编号为001203的发票与编号为1203的发票相同。
但是,如果您绝对必须按照您描述的方式进行操作,那么转换为 VARCHAR 字段可能会起作用。转换后的历史数据可以按原样存储,任何新条目都可以填充到所需数量的零。但我不建议这样做。
关于mysql - 带前导零的 LPAD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17612920/
我想调用函数_.lpad('1', 2, '0')但 chrome 告诉我 Uncaught TypeError: _.lpad is not a function 。我已经将脚本标记包含在 HTML
我有发票编号的表格。准则规定数字应包含 6 位或更多位数字。首先尝试做: UPDATE t1 SET NUMER=CONCAT('00000',NUMER) WHERE LENGTH(NUMER)=1
我有发票编号的表格。准则规定数字应包含 6 位或更多位数字。首先尝试做: UPDATE t1 SET NUMER=CONCAT('00000',NUMER) WHERE LENGTH(NUMER)=1
我有如下表格: code ---> INTEGER name ---> CHAR +------+------+ | code | name | +------+------+ | 1 | a
这里有一些我无法解释的东西,希望能得到一些帮助,看看我明显遗漏了什么:) 在解决这个问题时: Oracle SQL to Sort Version Numbers 我想聪明的 regexp_repla
使用 Oracle 19c,以下过程需要几秒钟才能编译。也可以使用 db<>fiddle 重现(18c 和 21c)。 对于 Oracle 12.1,它会立即编译。 CREATE OR REPLACE
我试图用 0 向左填充一个字符串。输出字符串的长度应该是 7。 这是我的代码: inputstr = "38" in = string(7 - Len(inputStr),0) & inputStr
我正在使用 PostgreSQL 9.5 并且有一个表,其中包含名称的“area_name”文本列,这些名称具有编号扩展名: area_name ---------------- AREA AREA
我正在尝试找到一种在 ID 开头添加 0 而无需修剪它的方法: 我目前正在使用 LPAD(id,4,"0") 女巫工作正常,直到 9999 请求:SELECT LPAD(12345,4,"0"); 异
我想对齐我的专栏“Gesamt”: SELECT k.KUNDENID AS ID, vorname AS Vorname, nachname AS Nachname,
我正在尝试使用 LPAD 和 RPAD 命令编写一个将生成“Oracle$$$Internet$$$Academy”的语句。到目前为止,这是我所拥有的,但是我收到了缺少右括号的错误。 SELECT L
NLS_CHARACTERSET 在我的 Oracle 数据库中是 AL23UTF8。 使用 RPAD 功能时遇到问题: Connected to Oracle Database 11g Enterp
我很好奇如何以最通用的方式正式地为 SQLite 模拟 RPAD 和 LPAD 函数。目标是能够做到 LPAD(column, character, repeat) RPAD(column, char
我在 SQL Server 2008 中看不到像 LPAD 这样的函数。例如,如何将以下查询转换为 T-SQL? select LPAD(MY_VALUE,2,' ')) VALUE FROM MY
我有一个需要左键的查询——我遇到的问题是在使用 string.PadLeft() 时它会导致查询在 C# 代码中执行,而不是作为 SQL 执行。 例子: response.FirstOrDefault
我正在尝试从 MySQL 中的不同表中选择多个列。 MySQL: CREATE TABLE IF NOT EXISTS movie( movie_id TINYINT(3) UNSIGNED
我遇到了一个非常奇怪的问题,即 Oracle 12c 不像 Oracle 11g 那样管理 2 字节字符,导致 LPAD 等某些功能出现问题。 我们有两个数据库,一个 11g 和一个 12c,具有相同
鉴于 l 是一个整数列表并且 win 是一个整数,下面的代码生成一个列表 lpadded: lpadded = win // 2 * [-1] + l + win // 2 * [-1] 在 lpad
我是一名优秀的程序员,十分优秀!