我是SQL的新手,目前正在使用mySQL CONCAT从Letters
创建一个id,即带有Number
的ABC,即00005。
CONCAT从数字中删除前导零。如何使用前导零保持原始数字,以便输出
ABC00005
不
ABC5
CONCAT(`Letters`,`Number`)
此CONCAT存储在ID
列中。然后,我需要能够按编号
ID
不
我在mergedID
表格中创建了一个tempid
列,并使用以下代码来解决我的问题
UPDATE `tempid` SET `mergedID` = CONCAT(`Letter`,`Number`); INSERT INTO `main` (`ID`) VALUES (`mergedID`)
这给了我正确的ID,包括零,但我觉得有更好的方法来做到这一点。
我现在可以执行以下操作:
SELECT * FROM `main` ORDER BY RIGHT(`ID`,5)
我相信我已经进行了研究以实现这一解决方案,并且不保证负面评价。
答案 0 :(得分:0)
所以你想这样做:
CONCAT(Letters, CAST(Number AS varchar))
将您的INT转换为VARCHAR,以使数据类型匹配
答案 1 :(得分:0)
这是我在做什么:
(在 php 中):
$week_day = date('d', $week_start);
在 SQL 中
SELECT (... other stuff), CONCAT( MONTH(CURRENT_DATE) + 10, {$week_day}, LPAD(FLOOR(RAND() * 99999.99), 5, '0') ) AS CurrInvoice
我使用相同的方法创建了这个 9 字符的字段大约 12 年,通过各种版本的 MySql 和 MariaDb(以及各种服务器),完全没有问题——没有 CAST 或“$week_day”的引号场地。 截至 2020 年 11 月。之后,我的主机更改了配置或 MariaDb 更改了某些内容,因为每次 '$week_day' 值小于 10 时,CONCAT 都会切断 PHP 命令生成的前导零 (date('d', blahblah) )并创建了一个8 个字符的字段。我最近才注意到这一点,所以我只是在 SQL 中引用了 $week_day 变量(例如,我使用了 '{$week_day}'),结果是 CONCAT如果当天少于 10 天,则正确维护前导零。这是一个旧线程,因此显然有些人总是不得不使用前导零来转换数字以保留它,但我告诉你我从来没有这样做直到最近。我的 MariaDb 版本是 10.2.37-MariaDB,我知道它已经很旧了,但该版本在 11 月没有改变——尽管有所改变。 无论如何,是的,我应该总是投射那个数字部分——生活和学习。
答案 2 :(得分:-1)
嘿....你使用Number数据类型是INT所以在int值之前删除所有0 请参阅... 00005数据库表仅添加5。
Answer:-
1.) Datatype change
OR
2.) Your query add static four Zero
See..
SELECT CONCAT(Letters,'0000',Number) from <Table Name>