【发布时间】:2016-02-09 14:00:07
【问题描述】:
我对 SQL 很陌生,但我有点碰壁:
我有非常简单的 SQL 查询,但我需要修改该查询以从 IP 范围 100.64.0.0 – 100.127.255.255 和 10.0.0.0 – 10.255.255.255 中仅选择 IP_ADDRESS。我知道我需要为此使用正则表达式,但不知道如何?你能帮帮我吗?
原始查询:
SELECT
sal.IP_ADDRESS, sal.COUNTRY_CODE, sal.EVENT_ID, p.name, p.PARTNER_ID
FROM
EVENTS_USER.STREAM_ACCESS_LOGS sal, EVENTS_USER.STREAM_USERS su, EVENT_USER.PARTNERS p
WHERE
su.PARTNER_ID = p.PARTNER_ID
AND sal.SUCESS = 'Y'
AND sal.COUNTRY_CODE is null;
这个正则表达式会是这样吗?:
SELECT * FROM EVENTS_USER.STREAM_ACCESS_LOGS(
select regexp_replace(regexp_replace('100.64.0.0', '(\d+)', '00\1'), '0*(\d{3})', '\1') IP_ADDRESS from dual
UNION ALL
select regexp_replace(regexp_replace('100.127.255.255', '(\d+)', '00\1'), '0*(\d{3})', '\1') from dual
) ORDER BY IP_ADDRESS;
【问题讨论】:
-
SQL Server 不支持 Regex,除非它是 2016 年的新功能,我还不知道。研究使用 PARSENAME()。
-
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI
JOIN语法-92 SQL 标准(20 多年前),不鼓励使用它 -
您好,感谢您的快速回复。这是我的第一个更大的 SQL 查询,而不仅仅是简单的 SELECT * FROM ;) 感谢您对不良习惯的建议,我会尝试从中学习,不要犯同样的错误两次,谢谢
-
您使用的是哪个 DBMS?
标签: sql sql-server regex database