SQL Fiddle
Oracle 11g R2 架构设置:
CREATE TABLE addresses ( Address ) AS
SELECT 'AB.CB.2k.SSS.45a' FROM DUAL UNION ALL
SELECT 'XY.ZZ.3m.WWW.67n' FROM DUAL UNION ALL
SELECT 'FD.KL.7b.TTT.82l' FROM DUAL UNION ALL
SELECT 'PQ.RS.TU' FROM DUAL UNION ALL
SELECT 'MN.OP' FROM DUAL;
查询 1:
如果您在地址中的. 字符少于3 个时想要NULL 值,那么您可以使用:
SELECT SUBSTR(
address,
1,
INSTR( address, '.', 1, 3 ) - 1
) AS address_part
FROM addresses
Results:
| ADDRESS_PART |
|--------------|
| AB.CB.2k |
| XY.ZZ.3m |
| FD.KL.7b |
| (null) |
| (null) |
查询 2:
如果你想在少于 3 个. 字符时返回完整的字符串,那么:
SELECT SUBSTR(
address,
1,
CASE pos WHEN 0 THEN LENGTH( address ) ELSE pos - 1 END
) AS address_part
FROM (
SELECT address,
INSTR( address, '.', 1, 3 ) AS pos
FROM addresses
)
Results:
| ADDRESS_PART |
|--------------|
| AB.CB.2k |
| XY.ZZ.3m |
| FD.KL.7b |
| PQ.RS.TU |
| MN.OP |