sql >> データベース >  >> RDS >> Mysql

INET_ATONに相当するSQLServerとは何ですか

    これらのストアドプロシージャの例 をご覧ください。 これを達成するために

    CREATE FUNCTION dbo.ipStringToInt 
    ( 
        @ip CHAR(15) 
    ) 
    RETURNS INT 
    AS 
    BEGIN 
        DECLARE @rv INT, 
            @o1 INT, 
            @o2 INT, 
            @o3 INT, 
            @o4 INT, 
            @base INT 
    
        SELECT 
            @o1 = CONVERT(INT, PARSENAME(@ip, 4)), 
            @o2 = CONVERT(INT, PARSENAME(@ip, 3)), 
            @o3 = CONVERT(INT, PARSENAME(@ip, 2)), 
            @o4 = CONVERT(INT, PARSENAME(@ip, 1)) 
    
        IF (@o1 BETWEEN 0 AND 255) 
            AND (@o2 BETWEEN 0 AND 255) 
            AND (@o3 BETWEEN 0 AND 255) 
            AND (@o4 BETWEEN 0 AND 255) 
        BEGIN      
            SELECT @base = CASE 
                WHEN @o1 < 128 THEN 
                    (@o1 * 16777216) 
                ELSE 
                    -(256 - @o1) * 16777216 
                END 
    
            SET @rv = @base +  
                (@o2 * 65536) +  
                (@o3 * 256) + 
                (@o4) 
        END 
        ELSE 
            SET @rv = -1 
        RETURN @rv 
    END
    

    使用例

    INSERT mytable VALUES(dbo.ipStringToInt('1.2.3.4'))
    

    それを逆にして整数を点線のクワッドに変えたい場合は、これを試してください

    CREATE FUNCTION dbo.ipIntToString 
    ( 
        @ip bigINT 
    ) 
    RETURNS CHAR(15) 
    AS 
    BEGIN 
        DECLARE @o1 bigINT, 
            @o2 bigINT, 
            @o3 bigINT, 
            @o4 bigINT 
    
        IF ABS(@ip) > 4294967295 
            RETURN '255.255.255.255' 
    
        SET @o1 = @ip / 16777216 
    
        IF @o1 = 0 
            SELECT @o1 = 255, @ip = @ip + 16777216 
    
        ELSE IF @o1 < 0 
        BEGIN 
            IF @ip % 16777216 = 0 
                SET @o1 = @o1 + 256 
            ELSE 
            BEGIN 
                SET @o1 = @o1 + 255 
                IF @o1 = 128 
                    SET @ip = @ip + 2147483648 
                ELSE 
                    SET @ip = @ip + (16777216 * (256 - @o1)) 
            END 
        END 
        ELSE 
        BEGIN 
            SET @ip = @ip - (16777216 * @o1) 
        END 
    
        SET @ip = @ip % 16777216 
        SET @o2 = @ip / 65536 
        SET @ip = @ip % 65536 
        SET @o3 = @ip / 256 
        SET @ip = @ip % 256 
        SET @o4 = @ip 
    
        RETURN 
            CONVERT(VARCHAR(4), @o1) + '.' + 
            CONVERT(VARCHAR(4), @o2) + '.' + 
            CONVERT(VARCHAR(4), @o3) + '.' + 
            CONVERT(VARCHAR(4), @o4) 
    END
    


    1. 特定のID値によるMysqlの順序

    2. 注文列MySQLを更新しますか?

    3. mysql SELECT LIKEは、単語全体を変数にのみ一致させる必要があります

    4. Oracleを使用して年、月、日で年齢を取得する方法