刚开始玩耍并测试亚马逊的红移。有一件事我需要做的,我可以很容易地在SQL中做的是改变userip为整数。这是在mssql中用一个标量函数完成的,该标量函数使用parsename来分解ip numbres,并通过常量分解它们。如何将userip转换为AMAZON REDSHIFT中的整数
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地址,STRPOS(IP地址) - 1)* 16777216”。 ')+(LEFT(SUBSTRING(IP地址,LEN(LEFT(IP地址,STRPOS(IP地址,' ')+ 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 (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(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),'。'))* 256)+(REVERSE(LEFT(REVERSE(ip_address),STRPOS(REVERSE(ip_address),'。') - 1))* 1)
想出来, –
“in sql” - >“在Microsoft SQL Server中”?“SQL”是查询语言,它不是产品。感谢你提到你正在使用Redshift(ParAccel的一个非常老的PostgreSQL版本的私有分支),不仅仅是说“PostgreSQL”。另外,如果可能的话,最好发布自己的问题的答案,而不是编辑你的答案。 –