当前位置: 首页 > news >正文

PostgreSQL学习笔记三:数据类型和运算符

数据类型和运算符

在这里插入图片描述

PostgreSQL 支持多种数据类型和运算符,以下是一些常见的数据类型和运算符的概述:

数据类型

  1. 基本数据类型

    • 整数类型

      • SMALLINT:2 字节,范围 -32,768 到 32,767。
      • INTEGER:4 字节,范围 -2,147,483,648 到 2,147,483,647。
      • BIGINT:8 字节,范围 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。
    • 浮点数类型

      • REAL:4 字节,单精度浮点数。
      • DOUBLE PRECISION:8 字节,双精度浮点数。
      • NUMERIC:可变精度,适合存储精确的小数。
    • 字符类型

      • CHAR(n):固定长度字符串。
      • VARCHAR(n):可变长度字符串,最大长度为 n。
      • TEXT:可变长度字符串,没有长度限制。
  2. 日期和时间类型

    • DATE:日期(年、月、日)。
    • TIME:时间(时、分、秒)。
    • TIMESTAMP:日期和时间。
    • INTERVAL:时间间隔。
  3. 布尔类型

    • BOOLEAN:真(TRUE)、假(FALSE)或未知(NULL)。
  4. 复合类型

    • 可以定义复合类型(类似于结构体),例如:
      CREATE TYPE person AS (name VARCHAR(100),age INT
      );
      
  5. 数组类型

    • 支持数组,例如:
      CREATE TABLE example (id SERIAL PRIMARY KEY,numbers INT[]
      );
      
  6. JSON 和 JSONB

    • JSON:存储 JSON 数据。
    • JSONB:二进制格式的 JSON,支持更快的查询。
  7. 地理空间数据类型

    • POINTLINEPOLYGON 等,适用于地理信息系统(GIS)。

在这里插入图片描述
https://www.postgresql.org/docs/current/datatype.html

运算符

  1. 算术运算符

    • +:加法
    • -:减法
    • *:乘法
    • /:除法
    • %:取模
  2. 比较运算符

    • =:等于
    • !=<>:不等于
    • >:大于
    • <:小于
    • >=:大于等于
    • <=:小于等于
  3. 逻辑运算符

    • AND:与
    • OR:或
    • NOT:非
  4. 字符串运算符

    • ||:字符串连接
    • LIKE:模式匹配
    • ILIKE:不区分大小写的模式匹配
  5. 数组运算符

    • @>:包含
    • <@:被包含
    • &&:交集
  6. JSON 运算符

    • ->:获取 JSON 对象的字段
    • ->>:获取 JSON 对象字段的文本值
    • #>:获取 JSON 对象的嵌套字段

示例

-- 创建表
CREATE TABLE users (id SERIAL PRIMARY KEY,name VARCHAR(100),age INT,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);-- 插入数据
INSERT INTO users (name, age) VALUES ('Alice', 30);-- 查询数据
SELECT * FROM users WHERE age > 25;-- 使用运算符
SELECT name || ' is ' || age || ' years old' AS description FROM users;

如何使用数组类型进行数据操作

在 PostgreSQL 中,数组类型是一种非常强大的数据类型,它允许你将多个值存储在一个数组数据结构中。你可以使用数组类型来存储一维或多维数组,并且可以使用一系列内置函数和运算符来操作这些数组。

以下是一些基本的数组操作示例:

创建数组类型的列

CREATE TABLE products (id SERIAL PRIMARY KEY,names TEXT[],prices NUMERIC[]
);

插入数组数据

INSERT INTO products (names, prices) VALUES
('{Alice,Bob,Charlie}', '{100,150,200}');

查询数组数据

SELECT * FROM products;

更新数组数据

UPDATE products SET prices = prices[1:2] || ARRAY[250] || prices[3:3] WHERE id = 1;

这将更新 prices 数组,将第三个元素更改为 250。

数组内置函数和运算符

  • 数组赋值

    SELECT prices[1] FROM products; -- 获取数组的第一个元素
    
  • 数组连接

    SELECT prices || ARRAY[300] FROM products; -- 将新元素添加到数组末尾
    
  • 数组切片

    SELECT prices[1:2] FROM products; -- 获取数组的第1到第2个元素(不包括索引2)
    
  • 数组长度

    SELECT array_length(prices, 1) FROM products; -- 获取数组的长度
    
  • 数组重叠

    SELECT prices && ARRAY[100, 200, 300] FROM products; -- 检查数组是否有重叠的元素
    
  • 数组元素的存在性

    SELECT prices @> ARRAY[100] FROM products; -- 检查数组中是否存在特定的元素
    
  • 数组位置

    SELECT prices <@ ARRAY[100, 150, 200, 250] FROM products; -- 检查数组是否是另一个数组的子集
    
  • 数组交集和差集

    SELECT (prices * ARRAY[100, 150, 200]) AS intersection, -- 交集(prices - ARRAY[100, 150, 200]) AS difference -- 差集
    FROM products;
    
  • 多维数组

    CREATE TABLE matrices (id SERIAL PRIMARY KEY,matrix NUMERIC[][]
    );
    INSERT INTO matrices (matrix) VALUES
    (ARRAY[[1,2],[3,4]]);
    

多维数组操作

对于多维数组,你可以使用更复杂的切片语法来获取元素。

-- 获取二维数组的第一行
SELECT matrix[1:2] FROM matrices;-- 获取二维数组的第一列
SELECT matrix[1:2:1] FROM matrices;

注意事项

  • 数组中的所有元素必须是相同的数据类型。
  • 数组可以使用下标访问,但是下标是从 1 开始的,而不是从 0 开始。
  • PostgreSQL 中的数组是一维数组的变体,对于多维数组,实际上是存储一系列数组。

这些是 PostgreSQL 中数组类型的基本操作。PostgreSQL 提供了大量的数组处理函数,可以进行更复杂的操作,如数组排序、反转、转换等。你可以在 PostgreSQL 的官方文档中找到完整的数组函数列表。

数组类型的特性和限制

特性

  1. 多维数组:PostgreSQL 允许定义可变长度的多维数组,可以是任何内置或用户定义的基本类型、枚举类型、复合类型等。
  2. 灵活性:数组的维度和大小可以在创建表时指定,但 PostgreSQL 不强制执行这些限制,实际行为与未指定长度的数组相同。
  3. 数组操作:支持多种数组操作符和函数,如连接、包含、重叠等。

限制

  1. 不强制维度和大小:虽然可以在定义中指定数组的维度和大小,但 PostgreSQL 不会强制这些限制,数组的实际维度和大小取决于插入的数据。
  2. 性能考虑:在某些情况下,使用数组可能会导致性能问题,尤其是在需要频繁搜索数组元素时,建议考虑将数组元素拆分到独立的表中。
  3. 不支持域类型:目前 PostgreSQL 不支持域类型的数组。

JSON 和 JSONB 的区别

  1. 存储格式

    • JSON:以文本形式存储,保留输入的空格、重复键和顺序。每次查询时需要解析,因此性能较低。
    • JSONB:以二进制格式存储,解析后删除不必要的空格和重复键,顺序可能不同。JSONB 的查询性能更好,因为它在存储时进行了优化。
  2. 索引支持

    • JSON:不支持 GIN 或 GiST 索引,查询性能较差。
    • JSONB:支持 GIN 和 GiST 索引,能够显著提高查询性能。
  3. 使用场景

    • JSON:适用于不需要频繁查询和操作的场景。
    • JSONB:适用于需要高性能和频繁查询的场景,特别是处理大量 JSON 数据时。
  4. 性能

    • JSON 在写入时速度较快,但读取速度较慢;JSONB 写入速度稍慢,但读取速度较快。

根据具体需求选择合适的数据类型,可以有效提高数据库的性能和灵活性。

相关文章:

PostgreSQL学习笔记三:数据类型和运算符

数据类型和运算符 PostgreSQL 支持多种数据类型和运算符&#xff0c;以下是一些常见的数据类型和运算符的概述&#xff1a; 数据类型 基本数据类型 整数类型&#xff1a; SMALLINT&#xff1a;2 字节&#xff0c;范围 -32,768 到 32,767。INTEGER&#xff1a;4 字节&#xff0…...

ROS理论与实践学习笔记——6 ROS机器人导航(仿真)

在 ROS 中&#xff0c;机器人导航&#xff08;Navigation&#xff09;是由多个功能包组合而成的系统&#xff0c;统称为导航功能包集&#xff08;navigation stack&#xff09;。它提供了一个全面的框架&#xff0c;使得移动机器人能够自主导航到指定目标点&#xff0c;同时避开…...

uniapp开发微信小程序,button的open-type=“share“ 分享给个人跳转到首页问题

当使用button标签带上open-type"share"属性&#xff0c;点击之后可分享当前页面给微信好友&#xff0c;但是分享之后朋友点开跳转到了首页问题。 需要使用 onShareAppMessage 函数 export default {onShareAppMessage(res) {if (res.from button) {// 来自页面内分…...

【jQuery】 jQuery基础及选择器介绍(基本选择器 层次选择器 属性选择器 过滤选择器)

文章目录 jQuery基础1. 优势2. 版本3. 基本语法4. 选择器基本选择器层次选择器属性选择器过滤选择器基本过滤选择器可见性过滤选择器 注意事项 jQuery基础 jQuery 是一个功能强大且易于使用的 JavaScript 库&#xff0c;它极大地简化了前端开发的工作。无论是 DOM 操作、事件处…...

网站在对抗机器人攻击的斗争中失败了

95% 的高级机器人攻击都未被发现&#xff0c;这一发现表明当前的检测和缓解策略存在缺陷。 这表明&#xff0c;虽然一些组织可能拥有基本的防御能力&#xff0c;但他们没有足够的能力应对更复杂的攻击。 例如利用人工智能和机器学习来模仿人类行为的攻击。 这些统计数据强调…...

Centos7 搭建logstash

下载并安装公共签名密钥&#xff1a; sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 创建一个名为 /etc/yum.repos.d/logstash.repo 的文件&#xff0c;并添加以下内容&#xff1a; [logstash-7.x] nameElastic repository for 7.x packages baseu…...

面试题:Redis(五)

1. 面试题 面试问 记录对集合中的数据进行统计 在移动应用中&#xff0c;需要统计每天的新增用户数和第2天的留存用户数&#xff1b; 在电商网站的商品评论中&#xff0c;需要统计评论列表中的最新评论&#xff1b; 在签到打卡中&#xff0c;需要统计一个月内连续打卡的用户数&…...

LeetCode18.四数之和

题目链接&#xff1a;18. 四数之和 - 力扣&#xff08;LeetCode&#xff09; 这道题是在三数之和上改编出来的&#xff0c;在写这道题之前可以尝试以下三数之和&#xff08;15. 三数之和 - 力扣&#xff08;LeetCode&#xff09;&#xff09;&#xff1b; 1.常规解法&#xf…...

jmeter出参保存到文件,保存失败解决

1、添加JSON提取 2、添加beanshell FileWriter writer new FileWriter("C:/Users/xxx/Desktop/signUrl.csv", true); writer.write(vars.get("company_name")"\t"vars.get("signUrl")"\n"); writer.close(); 写文件的两个…...

黑龙江网络安全等级保护办理机制

黑龙江的网络安全等级保护机制根据《网络安全法》和相关法规要求&#xff0c;信息系统按照安全等级从低到高分为五级&#xff0c;分别为一般、重要、非常重要、特别重要和特别敏感。不同等级的信息系统必须实施相应的安全措施&#xff0c;以确保系统免受内外部威胁&#xff0c;…...

小红的行列式构造

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 小红希望你构造一个3阶行列式&#xff0c;满足每个元素的绝对值不小于1&#xff0c;且行列式的值等于xxx。你能帮帮她吗&#xff1f; 输入描述: 一个整数xxx −100≤x≤100 输出描…...

pyflink过滤kafka数据

from pyflink.table import (TableEnvironment, EnvironmentSettings)# 输入、输出、过滤条件 columns_in [ ... ]columns_out [ ... ] filter_condition "name 蒋介石 and sex 男"# 创建执行环境t_env TableEnvironment.create(EnvironmentSettings.in_stream…...

Webpack 完整指南

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Webpack篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来webpack篇专栏内容:webpack介绍 目录 介绍 一、webpack 1.1、webpack是什么 1.2 webpack五个核心配置 1.…...

如何在 Ubuntu20.04 安装FTP Server vsftpd

1.安装&#xff1a; sudo apt-get install vsftpd 2.启动 sudo service vsftpd start //启动 sudo service vsftpd stop //停止 sudo service vsftpd restart //重新启动 3.打开配置文件 sudo nano /etc/vsftpd.conf 4.配置&#xff1a;限制在指定目录&…...

基于FPGA的DDS信号发生器(图文并茂+深度原理解析)

篇幅有限,本文详细源文件已打包 至个人主页资源,需要自取...... 前言 DDS(直接数字合成)技术是先进的频率合成手段,在数字信号处理与硬件实现领域作用关键。它因低成本、低功耗、高分辨率以及快速转换时间等优点备受认可。 本文着重探究基于 FPGA 的简易 DDS 信号发生器设…...

QT:绘制事件和定时器

1.绘制时针 xx.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimer> #include<QPainter> #include <QTime>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpubl…...

【算法——递归回溯】

这个东西还是很重要的&#xff0c;直接决定了你的动态规划章节的学习深度 78. 子集 方法1&#xff1a; vector<vector<int>>V; void dfs(vector<int> v,vector<int> nums,int index) {if(indexnums.size()) V.push_back(v);else{v.push_back(nums[i…...

手机在网状态接口的使用和注意事项

手机在网状态接口是用于查询手机号码在运营商数据库中的实时状态的工具&#xff0c;这种接口在互联网金融、贷款、租赁、保险等相关行业中尤为重要&#xff0c;因为它可以帮助这些行业进行更有效的风控审核。以下是对手机在网状态接口的详细介绍&#xff1a; 一、手机在网状态…...

WebGl 使用uniform变量动态修改点的颜色

在WebGL中&#xff0c;uniform变量用于在顶点着色器和片元着色器之间传递全局状态信息&#xff0c;这些信息在渲染过程中不会随着顶点的变化而变化。uniform变量可以用来设置变换矩阵、光照参数、材料属性等。由于它们在整个渲染过程中共享&#xff0c;因此可以被所有使用该着色…...

Leetcode 划分字母区间

题目要求&#xff1a; 将字符串 s 划分成尽量多的片段&#xff0c;保证每个片段中出现的字母不会出现在其他片段中。 具体解释如下&#xff1a; 尽量多的片段&#xff1a;题目要求的是在划分过程中&#xff0c;我们要尽量让划分的片段数量最大化&#xff0c;而不是最少化。每…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...