我对正则表达式是陌生的,因此这可能是一个简单的解决方案,或者可能对此更好地使用其他东西。请注意,我正在使用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
答案 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