内置函数--数字类型

2021-01-04
ABS()

返回绝对值

CEIL(X)
CEILING(X)

向上取整

FLOOR(X)

向下取整

RAND([N])

返回0 - 1 的随机浮点值

FLOOR(i + RAND() * (j − i))

SELECT FLOOR(7 + (RAND() * 5));

获取随机整数

INET_ATON(expr)	

mysql> SELECT INET_ATON('10.0.5.9');
        -> 167773449

将ipv4地址转换为数字。如果参数不正确,则返回 NULL。

INET_NTOA(expr)

mysql> SELECT INET_NTOA(167773449);
        -> '10.0.5.9'

将数字转换为ipv4地址。 如果参数不正确,则返回 NULL。

INET6_ATON(expr) 

mysql> SELECT HEX(INET6_ATON('fdfe::5a55:caff:fefa:9089'));
        ->'FDFE0000000000005A55CAFFFEFA9089'
mysql >SELECT HEX(INET6_ATON('10.0.5.9'));
        -> '0A000509'

在给定IPv6或IPv4网络地址作为字符串的情况下,返回一个二进制字符串,该二进制字符串以网络字节顺序(big endian)表示地址的数值。因为数字格式的IPv6地址比最大的整数类型需要更多的字节,所以此函数返回的表示形式具有VARBINARY数据类型: VARBINARY(16)用于IPv6地址和VARBINARY(4)用于IPv4地址。如果参数不是有效地址,则返回 NULL。

约束:

  • 不允许使用尾随区域ID,例如fe80::3%1或fe80::3%eth0。
  • 不允许使用尾随网络掩码,如 2001:45f:3:ba::/64或中所示 198.51.100.0/24。
  • 对于表示IPv4地址的值,仅支持无类地址。诸如此类的198.51.1的有类地址将被拒绝。不允许使用尾随端口号198.51.100.2:8080。不允许使用地址组成部分中的十六进制数字198.0xa0.1.2。不支持八进制数字:198.51.010.1被视为198.51.10.1,而不是198.51.8.1。这些IPv4约束也适用于具有IPv4地址部分的IPv6地址,例如IPv4兼容或IPv4映射的地址。

要将以数字形式表示的IPv4地址expr转换为以数字形式表示的VARBINARY值的IPv6地址,请使用以下表达式:

INET6_ATON(INET_NTOA(expr))

mysql> SELECT HEX(INET6_ATON(INET_NTOA(167773449)));
        ->'0A000509'
INET6_NTOA(expr)

mysql> SELECT INET6_NTOA(INET6_ATON('fdfe::5a55:caff:fefa:9089'));
        -> 'fdfe::5a55:caff:fefa:9089'

给定以数字形式表示的IPv6或IPv4网络地址为二进制字符串,返回以连接字符集中的字符串形式表示的地址。如果参数不是有效的地址,则返回NULL。
它不使用操作系统功能执行转换,因此输出字符串与平台无关
返回字符串的最大长度为39(4 x 8 + 7)
返回字符串对IPv6地址使用小写字母

IS_IPV4(expr)

mysql> SELECT IS_IPV4('10.0.5.9'), IS_IPV4('10.0.5.256');
        -> 1, 0

如果指定为字符串的参数是有效IPv4地址,则返回1,否则返回0。
IS_IPV4()它比INET_ATON()构成有效IPv4地址的内容更为严格,因此它对于需要对无效值执行严格检查的应用程序可能很有用;INET6_ATON()与IS_IPV4()检查IPv4地址一样强大。

IS_IPV4_COMPAT(expr)

mysql> SELECT IS_IPV4_COMPAT(INET6_ATON('::10.0.5.9'));
        -> 1 
mysql> SELECT IS_IPV4_COMPAT(INET6_ATON('::ffff:10.0.5.9'));
        -> 0

接受一个以数字形式表示的IPv6地址,该地址是由INET6_ATON()返回的二进制字符串。如果参数是有效的ipv4兼容IPv6地址,则返回1,否则返回0。ipv4兼容的地址格式为::ipv4_address

IS_IPV4_MAPPED(expr)

mysql> SELECT IS_IPV4_MAPPED(INET6_ATON('::10.0.5.9'));
        -> 0 
mysql> SELECT IS_IPV4_MAPPED(INET6_ATON('::ffff:10.0.5.9'));
        -> 1

接受一个以数字形式表示的IPv6地址,该地址是由INET6_ATON()返回的二进制字符串。如果参数是有效的ipv4映射IPv6地址,则返回1,否则返回0。ipv4映射的地址格式为::ffff:ipv4_address。
与IS_IPV4_COMPAT()一样,IPv4映射地址的IPv4部分也可以使用十六进制表示:

mysql> SELECT
    ->   IS_IPV4_MAPPED(INET6_ATON('::ffff:198.51.100.1')),
    ->   IS_IPV4_MAPPED(INET6_ATON('::ffff:c0a8:0001')),
    ->   IS_IPV4_MAPPED(INET6_ATON('::ffff:c0a8:1'));
        -> 1,1,1
IS_IPV6(expr)

mysql> SELECT IS_IPV6('10.0.5.9'), IS_IPV6('::1');
        -> 0,1

如果参数是指定为字符串的有效IPv6地址,则返回1,否则返回0。此功能不将IPv4地址视为有效的IPv6地址。

SIGN(X)

根据X是负的、零还是正的,返回参数的符号为-1、0或1。

TRUNCATE(X,D)

mysql> SELECT TRUNCATE(1.999,1);
        -> 1.9
mysql> SELECT TRUNCATE(1.999,0);
        -> 1
mysql> SELECT TRUNCATE(122,-2);
       -> 100

返回数字X,截断到D小数位。如果D为0,则结果没有小数点或小数部分。 D可以为负数,以使值X小数点左边的D位变为0

GREATEST(value1,value2,...)

mysql> SELECT GREATEST(34.0,3.0,5.0,767.0);
        -> 767.0
mysql> SELECT GREATEST('B','A','C');
        -> 'C'

根据两个或更多参数,返回最大参数,参数的比较规则与LEAST()相同

LEAST(value1,value2,...)

mysql> SELECT LEAST(34.0,3.0,5.0,767.0);
        -> 3.0
mysql> SELECT LEAST('B','A','C');
        -> 'A'

根据两个或更多参数,返回最小参数。使用以下规则比较参数:

  • 如果有任何参数NULL,则结果为NULL。无需比较。
  • 如果所有参数都是整数值,则将它们作为整数进行比较。
  • 如果至少一个参数为双精度,则将它们作为双精度值进行比较。如果至少一个参数是一个DECIMAL值,则将它们作为DECIMAL值进行比较。
  • 如果参数包含数字和字符串的混合,则将它们作为数字进行比较。
  • 如果任何参数是非二进制(字符)字符串,则将参数作为非二进制字符串进行比较。
  • 在所有其他情况下,将参数作为二进制字符串进行比较。
{/if}