【问题标题】:concat string and numbers without removing zeros连接字符串和数字而不删除零
【发布时间】:2014-05-02 15:22:36
【问题描述】:

我是 SQL 新手,目前使用 mySQL CONCAT 从 Letters 即 ABC 和 Number 即 00005 创建一个 ID。 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

我在tempid 表中创建了一个mergedID 列,并使用以下代码来解决我的问题

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

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

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

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

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

【问题讨论】:

  • 列有哪些数据类型?
  • 您似乎正在尝试存储派生数据。这有时是不受欢迎的。
  • 是的,它是一个零填充列
  • 我看不到 concat 如何删除前导零; fiddle.
  • 当我将 CONCAT 放到另一个表中时,它们似乎被删除了

标签: mysql sql


【解决方案1】:

所以你想这样做:

CONCAT(Letters, CAST(Number AS varchar))

将您的 INT 转换为 VARCHAR,以便数据类型匹配

【讨论】:

    【解决方案2】:

    这就是我正在做的事情:

    (在 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 月没有改变——虽然有些改变。 无论如何,是的,我应该一直 CAST 那个数字部分——生活和学习。

    【讨论】:

      【解决方案3】:

      嘿....你使用 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>
      

      【讨论】:

        猜你喜欢
        • 2021-06-16
        • 2014-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-09
        相关资源
        最近更新 更多