【问题标题】:SQL Concat and intvalueSQL Concat 和 intvalue
【发布时间】:2014-10-10 08:48:01
【问题描述】:

我有一个索引字段和一个子索引字段,我需要连接它们以获得一个 id。

我不能只连接这两个字段,因为那样它可以给出双精度值...

假设我得到了索引 18 和子索引 8,它会给我 188,这也将索引 1 和子索引 88 给我。

因为我也想在子索引字段中添加一个 0,其中的值是 1-9。

有人可以帮我解决这个问题的语法吗?语言是 MySQL,两个表都有 int 值..

如果值为 1-9,我必须在子索引之前添加一个 0,CONCAT (index,subindex) ASindexID

【问题讨论】:

  • ...当subindex 增长到 3 位数时会发生什么? (如果您的答案是“添加另一个 0,那么...)如果 id 用于您的数据库内部,为什么不将其保留为 2 列?如果它用于 outside 您的数据库,您很可能应该为此目的生成一个特定的(单个)id(或者可能格式化不同的连接,如果那是 id 值首先来自的地方,但它们很可能是 strings,并且应该这样输入/存储)。

标签: mysql sql concat


【解决方案1】:

您可以将 CASE 与 CONCAT 结合使用,如下所示。

WORKING FIDDLE HERE

SELECT
`INDEX`,`SUB_INDEX`,
(
    CONCAT
    ((CASE WHEN `INDEX` <10
         THEN CONCAT ('0' , `INDEX`)
         ELSE `INDEX`
      END)
    ,
    (CASE WHEN SUB_INDEX <10
        THEN CONCAT ('0' , `SUB_INDEX`)
         ELSE SUB_INDEX 
      END)
     )
) AS ID
FROM MY_TABLE 

【讨论】:

    【解决方案2】:
    select CONCAT ( 
      if(`index`<10,CONCAT ('0' , `INDEX`),`INDEX`), 
      if(`subindex`<10,CONCAT ('0' , `subindex`),`subindex`)) as ID from Table1
    

    DEMO

    【讨论】:

    • 请在您的代码中添加更多解释,以便其他人更容易理解您的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 2014-10-24
    • 2022-01-16
    相关资源
    最近更新 更多