только начинаю экспериментировать и тестировать красное смещение Amazon. Одна вещь, которую мне нужно сделать, что я могу легко сделать в sql, - это изменить userip на целое число. Это делается в mssql с помощью скалярной функции, которая использует parsename для разделения IP-адресов и умножения их на константы.
CAST(
(CAST(PARSENAME(@IP,4) AS BIGINT) * 16777216) +
(CAST(PARSENAME(@IP,3) AS BIGINT) * 65536) +
(CAST(PARSENAME(@IP,2) AS BIGINT) * 256) +
CAST(PARSENAME(@IP,1) AS BIGINT)
AS BIGINT)
Вот как это выглядит для справки.
Как я ожидал, parsename не является функцией красного смещения, и поэтому возникает мой вопрос. Вы, ребята, знаете, как я могу добиться того же результата?
Догадаться:
(LEFT (ip_address, STRPOS (ip_address, '.') - 1) * 16777216) + (LEFT (SUBSTRING (ip_address, LEN (LEFT (ip_address, STRPOS (ip_address, '.') + 1)), LEN (ip_address) - LEN (LEFT (ip_address, STRPOS (ip_address, '.') - 1)) - LEN (LEFT (REVERSE (ip_address), STRPOS (REVERSE (ip_address), '.') - 1)) - 2), STRPOS ( SUBSTRING (ip_address, LEN (LEFT (ip_address, STRPOS (ip_address, '.') + 1)), LEN (ip_address) - LEN (LEFT (ip_address, STRPOS (ip_address, '.') - 1)) - LEN (LEFT (REVERSE (ip_address), STRPOS (REVERSE (ip_address), '.') - 1)) - 2), '.') - 1) * 65536) + (RIGHT (SUBSTRING (ip_address, LEN (LEFT (ip_address, STRPOS (ip_address, '.') + 1)), LEN (ip_address) - LEN (LEFT (ip_address, STRPOS (ip_address, '.') - 1)) - LEN (LEFT (REVERSE (ip_address), STRPOS (REVERSE (ip_address) ), '.') - 1)) - 2), LEN (SUBSTRING (ip_address, LEN (LEFT (ip_address, STRPOS (ip_address, '.') + 1)), LEN (ip_address) - LEN (LEFT (ip_address, STRPOS (ip_address, '.') - 1)) - LEN (LEFT (REVERSE (ip_address), STRPOS (REVERSE (ip_address), '.') - 1)) - 2)) - STRPOS (SUBSTRING (ip_address, LEN ( ЛЕВЫЙ (ip_address, STRPOS (ip_address, '.') + 1)), LEN (ip_address) - LEN (LEFT (ip_address, STRPOS (ip_address, '.') - 1)) - LEN (LEFT (REVERSE (ip_address), STRPOS (REVERSE (ip_address), '.') - 1)) - 2), '.')) * 256) + (REVERSE (LEFT (REVERSE (ip_address), STRPOS (REVERSE (ip_address), '.') - 1) )) * 1)