文章851
标签121
分类10

MySQL 如何截取精度聚合 sum 使用 TRUNCATE

MySQL 如何截取精度聚合 sum 使用 TRUNCATE

在处理数据时,有时候我们需要对聚合函数的结果进行精度控制,特别是对于一些涉及金额、数量等敏感数据的处理。MySQL提供了TRUNCATE()函数,可以用于截取小数部分,从而实现精度控制。本文将介绍如何在MySQL中使用TRUNCATE()函数对SUM()函数的结果进行精度截取。

使用 TRUNCATE 函数

TRUNCATE()函数用于截取小数部分,并返回指定精度的值。它的语法如下:

TRUNCATE(X, D)

其中:

  • X 是要截取小数部分的数值。
  • D 是保留的小数位数。

示例

假设我们有一个订单表orders,其中包含订单金额amount字段。我们希望计算所有订单金额的总和,并将结果保留两位小数。

我们可以使用SUM()函数计算订单金额的总和,然后结合TRUNCATE()函数截取小数部分:

SELECT TRUNCATE(SUM(amount), 2) AS total_amount
FROM orders;

这将返回所有订单金额的总和,并将结果保留两位小数。

应用场景

在实际应用中,对聚合函数的结果进行精度控制的需求非常常见。例如:

  • 计算销售总额或利润时,需要保留特定精度的小数位。
  • 在财务报表中,需要对金额进行合适的精度控制,以确保准确性和可读性。
  • 在统计分析中,需要对数量、比例等指标进行精确计算和展示。

文献引用

在编写本文时,以下资源对理解MySQL中使用TRUNCATE()函数进行精度控制提供了帮助:

  1. MySQL官方文档:TRUNCATE()
  2. MySQL Tutorial:MySQL TRUNCATE() function

这些资源提供了对TRUNCATE()函数的详细解释和示例,有助于更好地理解如何在MySQL中进行精度控制。

通过合理使用TRUNCATE()函数,可以对聚合函数的结果进行精度截取,从而满足不同场景下对数据精度的需求,并确保数据的准确性和可读性。

PHP 接收 Content-Type 是 application/json的请求数据

php 接收 Content-Typeapplication/json的请求数据

通过捕获 输入流 file_get_contents('php://input')

swoole 程序可以用 swoole_http_request $request->rawContent();

【技巧】让你的PHP命令行输出丰富多彩

大家有没有注意到,在我们使用 composer 进行依赖管理的时候,它在命令行中的输出竟然是彩色的,而我们自己写的程序使用 echo 进行输出的时候,都是默认的黑底白字(依赖于主题),逼格一点都不高!

探究开始
为了探究命令行带颜色输出,我查看了安装 composer 时从官方下载的 composer-setup.php ,其中的字符输出函数如下:

/**
 * colorize output
 */
function out($text, $color = null, $newLine = true)
{
    $styles = array(
        'success' => "\033[0;32m%s\033[0m",
        'error' => "\033[31;31m%s\033[0m",
        'info' => "\033[33;33m%s\033[0m"
    );

    $format = '%s';

    if (isset($styles[$color]) && USE_ANSI) {
        $format = $styles[$color];
    }

    if ($newLine) {
        $format .= PHP_EOL;
    }

    printf($format, $text);
}

可以看到,这个函数中定义了三种类型的色彩输出,而且都是用形如 \033[Xm 的特殊字符串将其包装之后进行的输出,所以,这个形式的特殊字符串究竟是个什么神奇东西?

ANSI转义序列

经过查询资料,发现上一节中所述的神奇字符串是 ANSI转义序列[1] ,通过它可以控制文字在终端上的样式,如加粗、斜体、颜色等。
ANSI转义序列的解析在终端进行,不同的终端的对其的支持程度也不尽相同,本文采用的终端是 xShell ,已经可以支持大部分的转移序列。

序列写法

ANSI转义序列以 ESC转义字符(ASCII码为27) 和 字符[ 开始,以字符 m 结束,上一节代码中的 ESC转移字符串 采用了八进制的写法,在实际使用中我们也可以用 \e 这样的转义写法。

牛刀小试

在终端执行如下命令:

echo -e "\e[38;5;1m红色\e[0m"

可以看到终端中将出现如下输出:

Xnip2024-03-29_23-09-53.png

文字变成红色的了!
那么上述指令时怎么控制文字的颜色的呢?
紧跟在 [ 之后数字 38 告诉终端转义序列要控制文字的前景色了,后续的 5 表示采用 256色,1 表示使用红色,随即转义序列以 m 结束,进入一般字符串部分;
在字符串的最后,又开始了一个转义序列,数字 0 表示重置所有的字体样式处理,以防止本条指令执行之后还会影响其他指令的颜色输出;

控制参数

Xnip2024-03-29_23-10-54.png

来点骚操作
ANSI转义序列对于文字样式的控制效果时可以叠加的,使用示例如下:

echo -e "\e[38;5;255;48;5;1;1;4;9;5m红底白字加粗闪烁\e[0m\e[38;5;4;1m蓝色加粗\e[0m"
输出如下:

3978608-8089066057edef36.webp

注意:上述样例中蓝色加粗部分在定义样式之前使用字符串\e[0m 清除了之前所配置的样式,如果不执行这一步,蓝色加粗部分字体还会携带红色背景和闪烁效果。

在PHP中运用

可以观察到上我们在上一节中我们所使用的 echo 指令都带上了 -e 参数来进行特殊字符处理,那么PHP中要怎么使用ANSI转义序列呢?
经过本人的亲测,PHP中的语法接口 echo 是会进行特殊字符处理的,所以上述样例在PHP代码中可以这么写:

<?php
echo "\e[38;5;255;48;5;1;1;4;9;5m红底白字加粗闪烁\e[0m\e[38;5;4;1m蓝色加粗\e[0m", PHP_EOL;

脚本的运行结果同上面截图中的一致。

工具化

每次调整文字的样式都要写那么一串转义序列太麻烦了,而且可读性也很差。
为了更方便地在PHP程序中输出样式丰富的字符串到终端,我们需要实现一个工具类。

PHP用CURL发送application/json 数据

使用 PHP CURL 发送 application/json 数据

在网络编程中,使用CURL库可以方便地与各种Web服务进行通信。当需要发送JSON格式的数据时,我们可以使用PHP的CURL扩展来轻松实现。本文将介绍如何使用PHP CURL发送application/json类型的数据。

1. 准备 JSON 数据

首先,我们需要准备要发送的JSON数据。JSON是一种轻量级的数据交换格式,常用于客户端和服务器之间的数据传输。例如,我们可以创建一个包含一些信息的关联数组,并使用json_encode()函数将其转换为JSON格式:

$data = array(
    'name' => 'John Doe',
    'email' => 'john@example.com'
);

$json_data = json_encode($data);

2. 设置 CURL 选项

接下来,我们需要设置CURL选项,以确保请求以JSON格式发送。我们需要设置请求的Content-Type头为application/json,并将JSON数据作为请求的主体发送。

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, 'https://example.com/api');
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $json_data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

3. 执行 CURL 请求

最后,我们执行CURL请求并处理响应:

$response = curl_exec($curl);

if ($response === false) {
    echo 'CURL Error: ' . curl_error($curl);
} else {
    echo 'Response: ' . $response;
}

curl_close($curl);

这样,我们就可以使用PHP CURL轻松发送JSON数据了。

应用场景

发送JSON数据是与Web服务进行通信的常见需求。例如:

  • 向RESTful API发送POST请求。
  • 与第三方API进行数据交换。
  • 通过Webhooks将数据发送到其他系统。

文献引用

在编写本文时,以下资源对理解如何使用PHP CURL发送JSON数据提供了帮助:

  1. PHP官方文档:curl_setopt()
  2. PHP官方文档:json_encode()
  3. Stack Overflow:Sending application/json using curl

这些资源提供了对CURL选项设置和JSON编码的详细解释和示例,有助于更好地理解如何在PHP中使用CURL发送JSON数据。

通过合理使用PHP CURL,我们可以轻松地与各种Web服务进行通信,并发送JSON格式的数据,实现数据交换和数据传输的需求。

Linux 系统中/dev/shm的作用

Linux 系统中 /dev/shm 的作用

在Linux系统中,/dev/shm是一个特殊的虚拟文件系统,通常用于在内存中创建临时文件系统,提供高速的共享内存区域。本文将介绍/dev/shm的作用以及其在Linux系统中的应用。

1. 作用和特点

/dev/shm是一个内存中的虚拟文件系统,其主要作用包括:

  • 提供共享内存/dev/shm允许多个进程共享内存数据,这比使用磁盘上的临时文件系统更快速和高效。
  • 减少磁盘 I/O:由于/dev/shm位于内存中,而不是磁盘上,因此对其进行读写操作不会涉及到磁盘I/O,可以显著提高性能。
  • 用于临时文件存储/dev/shm可以用于存储临时文件,例如进程间通信的共享数据、临时文件缓存等。

2. 应用场景

/dev/shm在Linux系统中有多种应用场景,包括但不限于:

  • 共享内存通信:多个进程之间可以通过/dev/shm共享内存区域进行通信,从而实现高效的数据交换和共享。
  • 临时文件存储:临时文件可以存储在/dev/shm中,这样可以减少磁盘 I/O,提高文件读写速度。
  • 数据库临时表:一些数据库系统如MySQL等可以使用/dev/shm作为临时表的存储区域,以提高查询和操作性能。
  • 缓存存储:某些应用程序可以使用/dev/shm作为缓存存储区域,从而提高数据的访问速度和响应性能。

3. 文献引用

在编写本文时,以下资源对理解/dev/shm的作用和应用提供了帮助:

  1. Linux man 手册:shm_overview(7) - Linux manual page
  2. Linux Foundation:Shared Memory
  3. Stack Overflow:What is /dev/shm and its practical usage?

这些资源提供了关于/dev/shm的详细说明和实际应用案例,有助于更好地理解其在Linux系统中的作用和用途。

通过合理利用/dev/shm,我们可以在Linux系统中实现共享内存和临时文件存储,从而提高系统性能和应用程序的效率。

">