Я совсем новичок в SQL и я как бы от удара о стену с этим:SQL Server: выбор Ips формы Ips диапазоне
У меня есть довольно простой запрос SQL, но мне нужно изменить, что этот запрос, чтобы выбрать только IP_ADDRESS
от диапазона IP 100.64.0.0 – 100.127.255.255
и 10.0.0.0 – 10.255.255.255
. Я знаю, что мне нужно использовать regexp для этого, но не знаю, как это сделать? Можешь мне помочь?
Первоначальный запрос:
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(). –
[Плохие привычки пинать: использование JOIN в старом стиле] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins. aspx) - стиль старого стиля * разделенный запятыми список таблиц * был заменен на * правильный * ANSI 'JOIN' синтаксис в ANSI - ** 92 ** SQL Standard (** более 20 лет ** назад) и его использование не рекомендуется –
Привет, спасибо за быстрый ответ. Это мой первый более крупный SQL-запрос, чем просто простой SELECT * FROM;) спасибо за советы о вредных привычках, я попытаюсь извлечь из этого и не ошибаюсь дважды, спасибо – Vertigo448