正则表达式:仅选择表达式的一部分

时间:2018-06-20 10:27:31

标签: sql regex teradata

我对正则表达式是陌生的,因此这可能是一个简单的解决方案,或者可能对此更好地使用其他东西。请注意,我正在使用teradata SQL assistant

数据中的模式类型:

  • 99 A
  • 99 Box 1
  • 99 Box 1B
  • 999 B
  • 999 Bx 1

这些是门牌号码,有时还会附加盒号。我只想选择门牌号码,有时是以99 A格式表示,在这种情况下也应选择A

因此,对于上述四种情况,我的正则表达式的结果(或者,如果您有更好的选择,请放心)应该是:

  • 99 A
  • 99
  • 99
  • 99 B
  • 999
  • 999

4 个答案:

答案 0 :(得分:3)

Teradata还具有REGEXP_SUBSTR功能

SELECT REGEXP_SUBSTR(house_number,'^\d+(\s+\w$)?') as house_number_without_box
FROM YourTable

答案 1 :(得分:1)

如果您的样本数据对您的整个数据集都非常简洁,则该解决方案应足够简单。

SELECT CASE WHEN LEN(field) = 4 THEN field ELSE LEFT(field, 2)
FROM yourtable

答案 2 :(得分:0)

这将解决您的问题

SELECT case when position('box' IN field)= 0 then field else 
                    substr(field, 1, length(field) - position('box' IN field) )  end
FROM yourtable

答案 3 :(得分:0)

您可能要考虑使用正则表达式的此解决方案:

int.Parse