2011-07-31 36 views
1

我在sql server 2008中有一列是varchar(255)。 该列充满了'测量',并且有大约15,000条记录。 由于列是字符串类型并且已经被人类手动输入,所以已经变得凌乱,例如 。SQL字符串抽取

  • 100x200cm
  • 200x400mm
  • 3" 9"
  • 30×20
  • 12厘米长

基本上我需要提取所有的测量(即我可以)成可用尺寸并将每个单元存储到新列(高度/宽度/深度)中。

任何人都可以提出最好的方式去做这件事吗?

我一直在寻找的正则表达式,但不能肯定的最佳方式前进

+2

祝你好运。无论如何,我不会在SQL中这样做:解析太多组合。 – gbn

回答

1

我推荐一个非常严格的解析器每当遇到一些它无法明确处理会抛出异常。这样你就可以省掉惊喜。

首先,您应该为此使用脚本语言。

取的记录,并在它们之间迭代并为每个尝试解析它记录:

  • ^([1-9][0-9]*)x([1-9][0-9]*)([a-z]+)$ - 如果匹配,你匹配$3对有效单位列表,例如,“厘米”, “mm”,“m”等。

  • ^([1-9][0-9]*)([^ ]+) by ([1-9][0-9]*)(.+)$ - 如果匹配,比较匹配的单位$2$4。再次将它们与有效单位列表进行匹配,如果成功,但它们不相同,则将其转换为另一个。

您不断为引发异常的每个项目添加严格检查。这样,您的表达式列表将随您处理的情况一起展开。

+0

注意:SQL Server不支持T-SQL中的正则表达式 – gbn

+0

这就是我注意到使用脚本语言的原因。 – Shi

+0

对不起,这是OP,而不是你。甲骨文有正则表达式和一些民间混合起来...... :-) – gbn