连接字符串和数字而不删除零

时间:2014-05-02 15:22:37

标签: mysql sql

我是SQL的新手,目前正在使用mySQL CONCAT从Letters创建一个id,即带有Number的ABC,即00005。 CONCAT从数字中删除前导零。如何使用前导零保持原始数字,以便输出

ABC00005

ABC5

CONCAT(`Letters`,`Number`)

此CONCAT存储在ID列中。然后,我需要能够按编号

选择ID
  1. ZYX00001
  2. ABC00002
  3. PQR00003
  4. HIJ00004
    1. ABC00002
    2. HIJ00004
    3. PQR00003
    4. ZYX00001
    5. 我在mergedID表格中创建了一个tempid列,并使用以下代码来解决我的问题

      UPDATE `tempid` SET `mergedID` = CONCAT(`Letter`,`Number`); INSERT INTO `main` (`ID`) VALUES (`mergedID`)
      

      这给了我正确的ID,包括零,但我觉得有更好的方法来做到这一点。

      我现在可以执行以下操作:

      SELECT * FROM `main` ORDER BY RIGHT(`ID`,5)
      

      我相信我已经进行了研究以实现这一解决方案,并且不保证负面评价。

3 个答案:

答案 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>