【问题标题】:How to extract numbers? [closed]如何提取数字? [关闭]
【发布时间】:2014-03-20 21:08:19
【问题描述】:

我有一个这样的数据库:

stockCode stockName stockStart stockFinish stockCurrentNumber
__________________________________________________________
100       Water         1          10          ?

现在我该如何编码让它看起来像这样......

stockCode stockName stockStart stockFinish stockCurrentNumber
__________________________________________________________
100001       Water         1          10          001

100002       Water         1          10          002

100003       Water         1          10          003

100004       Water         1          10          004

100005       Water         1          10          005

100006       Water         1          10          006

100007       Water         1          10          007

100008       Water         1          10          008

100009       Water         1          10          009

100010       Water         1          10          010

如果有人能提供帮助,我将不胜感激

抱歉,编辑,我只有一个记录,并希望在 stockStart 到 stockFinish 范围内复制它

【问题讨论】:

  • 第一列和最后一列的数据类型是什么?
  • @BhupeshC 他们都是SMALLINT。如何提取从 stockStart 到 stockFinish 的所有数字并将它们插入 stockCurrentNumber??
  • 如果最后一列是SMALLINT,前面的0怎么显示?
  • 请粘贴表格DDL

标签: java mysql sql primary-key composite-primary-key


【解决方案1】:

试试这个

SELECT   
CONCAT(`stockCode`,lpad(@sno + 1,3,0)) stockCode,
`stockName`, 
`stockStart`,
`stockFinish`,
@sno := lpad(@sno + 1,3,0) AS stockCurrentNumbe
FROM  Table1,
(SELECT @sno := 000) t

Fiddle

编辑

对于更新,您可以使用以下查询创建新表(供参考 see fiddle demo),一旦完成,您可以将表重命名为实际表,对于以下示例,我使用 int() not smallint

CREATE TABLE Table2
    (`stockCode` int(11),
     `stockName` varchar(5),
     `stockStart` int,
     `stockFinish` int, 
     `stockCurrentNumber` int(11))
;
INSERT INTO Table2
    (`stockCode`, 
     `stockName`, 
     `stockStart`,
     `stockFinish`, 
     `stockCurrentNumber`)

SELECT   
CONCAT(`stockCode`,lpad(@sno + 1,3,'0')) stockCode, 
  `stockName`, 
  `stockStart`,
  `stockFinish`,
  @sno := lpad(@sno + 1,3,'0') AS stockCurrentNumber
FROM  Table1,
(SELECT @sno := 000) t
;

table2 的stockCurrentNumber 列中的数据将包含不带前导零的数据,因为数据类型是整数且 001 =1,因此对于获取结果的前导零,您可以使用lpad(stockCurrentNumber,3,'0') 了解更多信息,请参阅LPAD Docs对于查询,它并不难,我刚刚使用变量为您的stockCurrentNumber 列和CONCAT() 生成自动递增值,以将自动递增值和stockCode 等值组合为CONCAT(stockCode,lpad(@sno + 1,3,'0')) stockCode ,希望有意义

Fiddle 2

【讨论】:

  • 嗨,你能解释一下这段代码吗?另外,我如何将其作为更新声明?我试过INSERT INTO Table1 VALUES ( CONCAT(stockCode,lpad(@sno + 1,3,0)) stockCode, stockName, stockStart, stockFinish, @sno := lpad(@sno + 1,3,0) AS stockCurrentNumbe)`但是我一直收到这个错误`你的SQL语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'stockCode、stockNamestockStartstockFinish、@sno := lpad(@sno + 1,3,0)' 附近使用的正确语法2:`
  • 抱歉,请您帮我修改您的代码,使其适用于我目前正在测试的更新数据库
  • @user3138212 你可以选择 ........ INTO FROM .... 或者做一个嵌套的 Insert Into table2 SELECT ...... ........
  • @user3138212 查看我的更新答案和updated fiddle
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 2020-07-12
相关资源
最近更新 更多