正则表达式:select 只是表达式的一部分

Regex: select only a part of the expression

我是正则表达式的新手,所以这可能是一个简单的解决方案,或者为此使用其他东西可能更好。请注意,我使用的是 teradata SQL assistant

我的数据中的模式类型:

这些是门牌号,有时还附有一个信箱号。我只想选择门牌号,有时例如采用 99 A 的格式,在这种情况下,还应选择 A

所以我的正则表达式(或者如果你有更好的选择,随意)对于以上四种情况的结果应该是:

如果您的示例数据对整个数据集而言是简洁的,那么解决方案就足够简单了。

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

这将解决您的问题

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

Teradata 也有 REGEXP_SUBSTR 函数

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

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

select * from table where (reason regexp '(^[0-9][0-9]+$)|(^[0-9][0-9]+ [A-Z]?$)')