探索 PostgreSQL 的高级数据类型 - 第 二 部分

范围类型

范围类型提供了一种简洁的方式来表示单个数据库字段中的值范围。它们在从时间数据到数字间隔的各种领域中都有应用。在本篇博客文章中,我们将通过 DML/SQL 语句和 Navicat for PostgreSQL 16 来深入了解它们的使用(以及好处!)。

探索 PostgreSQL 的高级数据类型 - 第 一 部分

理解范围类型

在 PostgreSQL 中,范围类型允许表示连续的值范围。这些范围可以是不同的数据类型,如数值、日期或时间戳。例如,范围可能表示一段时间,一组温度或一个产品价格范围。

实例:跟踪租赁时长

假设,我们想在免费的 dvdrental sample database数据库中追踪租赁的时长。我们可以使用范围类型来有效地存储租赁持续时间。以下是创建和填充新的“rentals_with_rental_period”表的语句:


CREATE TABLE rentals_with_rental_period (
    rental_id SERIAL PRIMARY KEY,
    customer_id INT,
    rental_duration INT,
    rental_period DATERANGE
);

INSERT INTO rentals_with_rental_period (customer_id, rental_duration, rental_period)
VALUES
(1, 7, '[2024-02-01, 2024-02-08]'),
(2, 5, '[2024-01-15, 2024-01-20]');
    

在 Navicat,我们可以通过表设计器来创建我们的表:

rentals_with_rental_period_in_table_designer (59K)

创建表后,我们可以向表中添加数据。请确保范围类型的值以方括号“[”开头,并以圆括号“)”结束。这样就告诉了 Navicat,这些值属于一个范围:

rentals_with_rental_period_table (24K)

在本例中,“rental_period”列存储了表示每次租赁开始和结束日期的范围。我们可以使用 @> 运算符轻松查询包含特定日期的租赁:

range_query (40K)

扩展应用:数值区间

范围类型不仅限于时间数据。他们也可以用于表示数值区间。例如,假设产品的价格可以根据购买的数量在一定范围内变化,我们可以使用范围类型来有效地构建它:


CREATE TABLE product_price (
    product_id SERIAL PRIMARY KEY,
    price_range NUMRANGE
);

INSERT INTO product_price (price_range)
VALUES
('[10.00, 20.00)'),
('[20.00, 30.00)'),
('[30.00, )');
    

在本例中,“price_range”列存储了表示每个产品的最低和最高价格范围。我们可以使用 @> 运算符来查询指定价格范围内的产品:


SELECT * FROM product_price
WHERE price_range @> 25.00;
    

总结

PostgreSQL 中的范围类型提供了表示和查询连续值范围的一种强大方式。无论是处理时间数据、数值区间还是其他连续值,范围类型都提供了一种简洁且高效的解决方案。通过利用范围类型,开发人员可以增强其数据库模式的表达能力和灵活性,为构建更复杂的应用程序奠定基础。

你是否正在为 PostgreSQL 数据库开发寻找一款易使用的图形化工具?Navicat 16 for PostgreSQL 正好符合你的需求。点击 此处 下载全功能应用程序,免费试用 14 天!

PostgreSQL 相关技术内容

PostgreSQL 与 Navicat:数据库行业的中坚力量

在 PostgreSQL 中存储三元数据

PostgreSQL 的实体化视图介绍

PostgreSQL 实体化视图的使用

为什么在下一个 IT 项目中选择使用 PostgreSQL

PostgreSQL 中的多版本并发控制

使用 Navicat Monitor 3.0 监控 PostgreSQL

Navicat Monitor 3 中查看 PostgreSQL 实例详细信息

使用 Navicat Monitor 3 跟踪 PostgreSQL 实例查询

在 PostgreSQL 中设置查询超时

更多技术干货,欢迎点击 这里 查阅 Navicat 技术智库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/450244.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ping工作原理

文章目录 目的ping网络协议 OSIICMP什么是ICMP作用功能报文类型查询报文类型差错报文类型ICMP 在 IPv4 和 IPv6 的封装ICMP 在 IPv4 协议中的封装ICMP 在 IPv6 协议中的封装ICMP 头部日常ping 排除步骤ping 查询报文使用code扩展目的 本文主要是梳理ping的工作原理- 揭开 ICMP…

ThreeWayBranch 优化阅读笔记

1. 优化目的 通过重排三分支的 BB 块减少比较指令的执行次数 代码路径: bolt/lib/Passes/ThreeWayBranch.cpp2. 效果 优化前: 注: 黄色数字表示BB块编号, 紫色表示该分支跳转的次数,绿色是代码里BB块的变量名 ThreeWayBranc…

如何把视频号里的视频提取出来?下载提取器支持一键下载视频!

下载微信视频号视频一直都是很多人都痛,本期分享如何使用视频号下载器下载视频。 视频下载提取器 工具名称:视频号下载小助手;简称,视频下载助手 使用平台:苹果手机、安卓手机、电脑设备 使用方法:一键…

零基础学习JS--基础篇--JavaScript类型化数组

JavaScript 类型化数组是一种类似数组的对象,并提供了一种用于在内存缓冲中访问原始二进制数据的机制。 引入类型化数组并非是为了取代 JavaScript 中数组的任何一种功能。相反,它为开发者提供了一个操作二进制数据的接口。这在操作与平台相关的特性时会…

【性能测试】Jmeter+InfluxDB+Grafana 搭建性能监控平台

一、背景 为什么要搭建性能监控平台? 在用 Jmeter 获取性能测试结果的时候,Jmeter自带的测试报告如下: 这个报告有几个很明显的缺点: 只能自己看,无法实时共享;报告信息的展示比较简陋单一,不…

数据库管理-第159期 Oracle Vector DB AI-10(20240311)

数据库管理159期 2024-03-11 数据库管理-第159期 Oracle Vector DB & AI-10(20240311)1 其他distance函数2 实例演示使用其他函数寻找最近向量点函数变体简写语法 总结 数据库管理-第159期 Oracle Vector DB & AI-10(20240311&#x…

如何理解JavaScript一切皆对象

"JavaScript一切皆对象"的说法,实际上是JavaScript编程语言的一个核心特性和设计理念。在JavaScript中,几乎所有的东西都可以被看作是一个对象,包括基本数据类型(如数字、字符串、布尔值)和复杂的数据结构&a…

算法耗时通用优化技巧 总结

最近在部署AI相关的算法,并要求减少总耗时,从中总结出的一些比较通用的优化技巧。精髓总结一句话就是:在同一时间尽可能充分利用硬件资源。而怎么尽可能充分利用呢,方式就是多线程并行处理。 1、单线程串行处理数据 假设算法需要…

Linux入门基本指令(1)

✨前言✨ 📘 博客主页:to Keep博客主页 🙆欢迎关注,👍点赞,📝留言评论 ⏳首发时间:2024年3月12日 📨 博主码云地址:渣渣C 📕参考书籍:…

Java开发从入门到精通(一):Java的项目案例

Java大数据开发和安全开发 Java 案例练习案例一:买飞机票案例二:开发验证码案例三:评委打分案例四:数字加密案例五:数组拷贝案例六: 抢红包案例七:找素数案例八:模拟双色球[拓展案例] Java 案例练习 案例一:买飞机票 分析: 方法是需要接收数据?需要接收机票原价、当前月份、舱…

【更新】cyの破三之旅(20240313~20240421)

序言 在过去一个多月里,我又如期搞砸一些事。 有些事不去做会遗憾,做完也很自责。 经年如此,已经习惯了。 但是这次破三,我一定不会再搞砸了。(FLAG已立,完篇收FLAG) PS:真的勇…

opengl 学习(三)-----着色器

着色器 分类demo效果解析教程 分类 OPengl C demo #include "glad/glad.h" #include "glfw3.h" #include <iostream> #include <cmath> #include <vector>#include <string> #include <fstream> #include <sstream>…

【Python数据结构与判断3/7】储存多个数据的元组

目录 导入 数据结构 元组 索引 in运算 ​编辑 Debug 总结 导入 我们之前学习的变量可以存储1个数据&#xff0c;那当我们需要存储10个数据的时候该怎么办呢&#xff1f;写10个变量可以解决这个问题&#xff0c;但是太冗长。 数据结构 我们也可以如第2张图所示&#xff0…

Accelerating Performance of GPU-based Workloads Using CXL——论文泛读

FlexScience 2023 Paper CXL论文阅读笔记整理 问题 跨多GPU系统运行的高性能计算&#xff08;HPC&#xff09;工作负载&#xff0c;如科学模拟和深度学习&#xff0c;是内存和数据密集型的&#xff0c;依赖于主机内存来补充其有限的板载高带宽内存&#xff08;HBM&#xff09…

【代码随想录 | 数组 02】移除元素

文章目录 2.移除元素2.1题目2.1思路2.2.1暴力解法2.2.2双指针法 23总结 2.移除元素 27.移除元素_力扣链接 2.1题目 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&am…

Kubernetes | 起源 | 组件详解

起源 起源&#xff1a; Kubernetes&#xff08;常简称为K8s&#xff09;起源于Google内部的Borg项目&#xff0c;是一个开源的容器编排引擎&#xff0c;于2014年首次对外发布。 Google Borg Google Borg 是 Google 内部开发和使用的大规模集群管理系统&#xff0c;用于管理和运…

Visual grounding-视觉定位任务介绍

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

网络通信另个角度的认识(进程间通信),端口号(为什么要有,和pid的关系,如何封装,和进程的定位原理+对应关系)客户端如何拿到服务端的port

目录 另一个角度认识网络通信 端口号 引入 -- 为什么要有端口号 问题 解决 端口号和pid 举例 介绍 分类 知名端口 注册端口 动态端口 客户端如何知道服务端的端口号 封装端口号 定位原理 进程和端口号的对应关系 数据如何被上层进程读到 另一个角度认识网络…

Node.js安装 (WIndows版本)

一. 下载地址 Node.js 安装包及源码下载地址为&#xff1a;https://nodejs.org/en/download 二. 具体安装步骤 下载对应msi文件后&#xff0c;双击下载后的安装包 点击next&#xff0c;进入下一步 选择安装目录&#xff0c;建议修改到非C盘目录 选择安装环境 点击 I…

docker启动时环境变量不生效(docker打包成镜像后环境变量失效)

前言 因项目需要多处部署&#xff0c;为了部署的方便&#xff0c;于是准备将项目环境打包成docker镜像以便于部署。mq、mysql这些在仓库中都有现成的镜像&#xff0c;虽然java和nginx的也都有&#xff0c;但是不知道当时是怎么想的&#xff0c;就不想搞太多镜像&#xff0c;也…