【问题标题】:Trim leading zeros in comma separated values in a column修剪列中逗号分隔值中的前导零
【发布时间】:2015-04-05 16:45:10
【问题描述】:

例如表格存储

store_id             Employee_id
0020,0345,0002345    0234
0034                 0943

我尝试了REPLACE(LTRIM(REPLACE(store_id,'0',' ')),' ','0'),但它仅修剪第一个值的前导零。 如何在sql查询中获取员工的所有storeId而不带前导零?

有可能吗?

【问题讨论】:

  • 当然——你知道如何首先拆分逗号分隔的值吗?
  • 您使用的是什么数据库?为什么要将 id 存储在逗号分隔的字符串中而不是使用联结表?
  • mysql 是的,我将 id 存储在逗号分隔的字符串中。
  • @stanley.No 。我想获取员工的 storeids,但必须修剪前导零。
  • REPLACE(store_id, '0', ' ') 将删除所有的零,而不仅仅是前导的。

标签: mysql sql regex replace trim


【解决方案1】:

如果您只想删除前导零 - 并且没有太多 - 您可以使用 replace():

select substr(replace(replace(replace(concat(',', store_id), ',0', ','),
                              ',0', ','),
                       ',0', ',')
              2, length(store_id)

这只是用逗号替换逗号后跟零,在字符串的开头和结尾添加和删除逗号。不同的数据库对substr()length()的名称略有不同,但功能大体上都有。

【讨论】:

    【解决方案2】:

    如果这是 rdbms 中的表,则违反 1NF。你应该避免这样做。如果可能,请使用联结表或引用表。否则,您可以使用相同的模式并插入与单个 Employee_id 对应的多个条目。

    现在,要以通用方式解决此问题,只有一个解决方案,UDF用户定义函数规范为here

    或将此类处理移至客户端。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-13
      • 2015-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多