[英]Regular Expression
我发现了我的错误!!! 这是错误的CASE WHEN regexp_substr(artikel.abez1,'[^/]*$') AS download,
我刚刚删除了“Case when”,它起作用了! 谢谢大家! :)
我有这个数据:
DE-Internet-LTE
AE-Internet-Ethernet-10M/30M
我怎样才能只得到值“10M”? 如果没有,我希望它返回空值。
我使用了这个查询:
regexp_substr(artikel.abez1,'[^-/]*$') AS upload
在第二行,它给出结果“10M”,但在第一行,它返回“LTE”而不是“null”。
我正在使用 SQL 工具 1.8 b38。
更新:我的完整查询:`
SELECT DISTINCT artikel.artnr1, L1.lfnr1 AS lfnr, L1.name1 AS lf_name, artikel.abez1, regexp_substr(artikel.abez1,'(. ?){1}(. ?)-', 1, 1, '', 2) AS 地, regexp_substr(artikel.abez1,'(. ?-){1}(. ?)-', 1, 1, '', 2) AS Technologie, CASE WHEN regexp_substr(artikel.abez1,'(. ?-){2}(. ?)-', 1, 1, '', 2) IS NULL THEN regexp_substr(artikel.abez1,'[^-] $') ELSE regexp_substr(artikel.abez1,'(. ? -){2}(. ?)-', 1, 1, '', 2) END AS Topologie, regexp_substr(regexp_substr(artikel.abez1, '([^-/]+)/[^-/]+$ '), '^[^-/]+') AS 上传, CASE WHEN regexp_substr(artikel.abez1,'[^/] $') AS 下载, bestanfragepos.preis / bestanfrage.bwkurs, 'Anfrage' AS Art, To_Char (bestanfrage.lfdanfrage), bestanfrage.anfragedatum, CASE WHEN InStr(angaufgut.reserve1, '.') > 1 THEN Months_Between( bestanfrage.anfragedatum, To_Date(angaufgut.reserve1)) ELSE To_Number(angaufgut) from artlikefreserve1内连接模型 ON modell.lfdnr = artikel.lfdmodnr left join bestanfragepos ON artikel.lfdnr = bestanfragepos.lf dartnr 左加入 bestanfrage ON bestanfragepos.lfdanfrage = bestanfrage.lfdanfrage left 加入lieferant L1 ON L1.liefnr = bestanfrage.lfdliefnr left JOIN angaufgut ON bestanfragepos.lfdangaufgutnr = angaufgut.lfmodnr WHERE 下 (L1.liefnr = bestanfrage.lfdliefnr)不喜欢 'cust%' 和 artikel.mandant = 1 AND bestanfragepos.preis != 0 ORDER BY abez1 /
`
它给出了错误 ora-00920 无效的关系运算符。
当我使用它时,它仅适用于单个数据:
SELECT regexp_substr(regexp_substr(artikelbez, '([^-/]+)/[^-/]+$'), '^[^-/]+') FROM nag_reporting_leitungspreise WHERE art = 'Vertrag' AND REF = 3791
您的代码返回 30M。 如果你真的想要 10M,那么这应该做你想做的:
select regexp_substr(regexp_substr(t.abez1, '([^-/]+)/[^-/]+$'), '^[^-/]+') AS upload
from t;
这是一个 db<>fiddle。
with t(str) as (
select * from table(ku$_vcnt(
'DE-Internet-LTE',
'AE-Internet-Ethernet-10M/30M',
'AE-Internet-Ethernet-20m/40m',
'AE-Internet-Ethernet-300M/500M',
'AE-Internet-Ethernet-4000k/600k',
'AE-Internet-Ethernet-200M'
))
)
select
str,
regexp_substr(str, '(\d+(k|m))(/\d+(k|m))?',1,1,'i',1) upload,
regexp_substr(str, '/(\d+(k|m))',1,1,'i',1) download
from t;
结果:
STR UPLOAD DOWNLOAD
----------------------------------- ------- --------
DE-Internet-LTE
AE-Internet-Ethernet-10M/30M 10M 30M
AE-Internet-Ethernet-20m/40m 20m 40m
AE-Internet-Ethernet-300M/500M 300M 500M
AE-Internet-Ethernet-4000k/600k 4000k 600k
AE-Internet-Ethernet-200M 200M
看看下面的解决方案:
with t(str) as
(
select column_value
from table(sys.odcivarchar2list(
'DE-Internet-LTE',
'AE-Internet-Ethernet-10M/30M',
'AE-Internet-Ethernet-20m/40m',
'AE-Internet-Ethernet-300M/500M',
'AE-Internet-Ethernet-4000k/600k',
'AE-Internet-Ethernet-200M'
))
)
select str,
regexp_substr(str, '-(\d+.*?)(/|$)',1,1,null,1) as upload,
regexp_substr(str, '/(\d+.*?)$',1,1,null,1) as download,
regexp_substr(regexp_substr(str, '([^-/]+)/[^-/]+$'), '^[^-/]+') as Gordan_Linoff_upload
from t;
输出:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.