我从一个需要SKU的旧项目为项目创建一个新数据库。 SKU由政府分配,但是,客户 - 为了避免必须注册新产品(需要数月)将采用现有的sku - 并在sku分配后添加各种随机性 例如:
没有办法知道他们会做什么,因为应用程序的原始设计是(最好的描述)补救...
所以我拉着标有" sku"的栏目。并且正在思考,嗯,好吧,如果我知道分裂的角色可以很容易地处理,那么就分开它:
SKU: 12345
extended_sku: ABC
主要是因为我一直在阅读有关stackoverflow的解决方案,并且有一些非常好的例子,但是对于随机性来说,这并不是一个真正的例子,我对正则表达式很感兴趣。
所以我需要知道如何测试字符串值(它是一个varchar字段)然后将其拆分为SKU bigint剥离任何非数字的东西,并将该extended_sku插入第二个表(用于规范化)使用数字sku后解析后的字符串...
无法确定sku长度,但是,它始终是数字。
所以基本上我需要在数字结束后测试任何东西
这将是来自XLSX导入的postgresql 9.5,我目前正在使用temp_table来正确格式化数据(因为同样,所有内容都是varchar字段 - 包括pk heh)
有什么想法吗?
答案 0 :(得分:0)
如果客户端生成的sku始终是原始sku的扩展名,那么client sku - original sku
字符串不会为您提供所需的新创建的sku,因此您可以将其存储在单独的字段中吗?例如 - 原始sku:725AB1
- 客户端sku:725AB1_-1-_
- >新创建的sku:725AB1_-1-_
- 725AB1 = _-1-_
(此处的减号操作需要实现)。
像
这样的东西答案 1 :(得分:0)
好的,解决方案是:
SELECT
substring(sku from '(([0-9]+.*)*[0-9]+)') AS sku,
substring(sku from '(([A-Za-z]+.*)*[A-Za-z]+)') AS extended,
sku AS original_sku
FROM catalogue
WHERE sku !~ '^[A-Za-z]+$';
@Veverke
完美地工作:)
答案 2 :(得分:0)
这对我有用:
SELECT
substring(sku from '[0-9]+') AS sku,
regexp_replace(sku, '^[0-9]+(.*)$', '\1') AS extended_sku,
sku AS original_sku
FROM products