regexp_substr 从 Oracle 中的句子末尾获取最后两个词 SQL
regexp_substr get last two words from end of the sentence in Oracle SQL
我有一个字符串:ON P6B 0B8
。我需要的输出是:P6B OB8
.
我可以用regexp_substr('ON P6B 0B8','[^ ]+$',1)
从句末得到最后一个词。但是我如何得到 space 之后的词——倒数第二个词?
如何告诉 regexp_substr
从后面看时不要停在第一个 space,而是继续前进直到看到第二个 space?
我很难理解 Oracle 正则表达式提供的元字符。
这是一个正则表达式,可以从您的字符串中获取最后 2 组字符。由于看起来您获得的是加拿大邮政编码,但您可能需要更加小心。
WITH 子句使用数据设置 table。请注意,第一行是有效的邮政编码格式,但第二行是错误的(连续 2 个字母)。始终为您的测试用例使用意想不到的数据,您不希望有任何意外,数据将始终包含意外。
第一个正则表达式匹配字符串末尾由 space 分隔的 2 组 3 个字符。乍一看这似乎没问题,但如果数据不好,它将被 returned。要收紧它,请使用第二个正则表达式,它专门检查 uppercase_letter-digit-uppercase_letter-space-digit-uppercase_letter-digit 的加拿大邮政编码格式,如果找不到,则 return NULL。也许您想通过 NVL() 调用和 return 一条消息来捕获它。
with tbl(str) as (
select 'Windsor ON P6B 0B8' from dual union all
select 'Windsor_bad_postcode ON A3C 9BB' from dual
)
select --regexp_substr(str, '.* (.{3} .{3})$', 1, 1, NULL, 1) postcode_w_bad
regexp_substr(str, '.* ([A-Z]\d[A-Z] \d[A-Z]\d)$', 1, 1, NULL, 1) postcode
from tbl;
我有一个字符串:ON P6B 0B8
。我需要的输出是:P6B OB8
.
我可以用regexp_substr('ON P6B 0B8','[^ ]+$',1)
从句末得到最后一个词。但是我如何得到 space 之后的词——倒数第二个词?
如何告诉 regexp_substr
从后面看时不要停在第一个 space,而是继续前进直到看到第二个 space?
我很难理解 Oracle 正则表达式提供的元字符。
这是一个正则表达式,可以从您的字符串中获取最后 2 组字符。由于看起来您获得的是加拿大邮政编码,但您可能需要更加小心。
WITH 子句使用数据设置 table。请注意,第一行是有效的邮政编码格式,但第二行是错误的(连续 2 个字母)。始终为您的测试用例使用意想不到的数据,您不希望有任何意外,数据将始终包含意外。
第一个正则表达式匹配字符串末尾由 space 分隔的 2 组 3 个字符。乍一看这似乎没问题,但如果数据不好,它将被 returned。要收紧它,请使用第二个正则表达式,它专门检查 uppercase_letter-digit-uppercase_letter-space-digit-uppercase_letter-digit 的加拿大邮政编码格式,如果找不到,则 return NULL。也许您想通过 NVL() 调用和 return 一条消息来捕获它。
with tbl(str) as (
select 'Windsor ON P6B 0B8' from dual union all
select 'Windsor_bad_postcode ON A3C 9BB' from dual
)
select --regexp_substr(str, '.* (.{3} .{3})$', 1, 1, NULL, 1) postcode_w_bad
regexp_substr(str, '.* ([A-Z]\d[A-Z] \d[A-Z]\d)$', 1, 1, NULL, 1) postcode
from tbl;