在字符串之前添加特定数量的零

时间:2017-01-19 14:50:16

标签: oracle

我写了这个查询

update cmart_m_branch 
   set code=concat('000',cmart_m_branch.code) 
 where length(code)=1.                                                              

但它无法正常工作..正在使用全零更新..列代码应该只有4个字符。但它正在这样工作....只是我正在改变查询.....

Update cmart_m_branch 
   set code=concat('00',cmart_m_branch.code) 
 where length(code)=2.

为什么它没有使用长度1 ..请告诉我..

1 个答案:

答案 0 :(得分:3)

听起来像LPAD后的

//AppBundle\Entity\Product.php
/**
 * @ORM\ManyToMany(targetEntity="Tag", cascade={"persist", "remove"})
 * @Assert\Valid()
 * @Assert\Regex(
 *      pattern="/[\w\s]+/",
 *      match=true,
 *      message="Your property should match my damn regex !"
 * )
 * @ORM\JoinTable(
 *      name="contenus_tags",
 *      joinColumns={@ORM\JoinColumn(name="contenu_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
 * )
 */
private $tags;

当然,这是假设您的cmart_m_branch.code列是字符串数据类型。如果是数字数据类型,那么在进行更新时没有用处 - 您应该在选择数据时动态格式化数据(或者您可以使用虚拟列进行格式化为了你)。这可以使用WITH sample_data AS (SELECT '1' col1 FROM dual UNION ALL SELECT '12' col1 FROM dual UNION ALL SELECT '123' col1 FROM dual UNION ALL SELECT '1234' col1 FROM dual) SELECT col1, LPAD(col1, 4, '0') new_col1 FROM sample_data; COL1 NEW_COL1 ---- -------- 1 0001 12 0012 123 0123 1234 1234

完成
to_char()

如果您使用连接完全死定(为什么?),那么您可以使用案例表达式来执行此操作:

WITH sample_data AS (SELECT 1 col1 FROM dual UNION ALL
                     SELECT 12 col1 FROM dual UNION ALL
                     SELECT 123 col1 FROM dual UNION ALL
                     SELECT 1234 col1 FROM dual)
SELECT col1,
       to_char(col1, '0999') new_col1
FROM   sample_data;

      COL1 NEW_COL1
---------- --------
         1  0001
        12  0012
       123  0123
      1234  1234