首页 > 数据库 >postgresql数据库sql常用函数

postgresql数据库sql常用函数

时间:2024-07-21 11:25:49浏览次数:10  
标签:postgresql -- 数据库 month current sql world Hello SELECT

常用sql写法

postgresql基本数据类型

类型描述
INTEGER整数类型,-2,147,483,648 到 2,147,483,647
BIGINT大整数类型,-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
SMALLINT小整数类型,-32,768 到 32,767
DECIMAL精确数字类型,可定义精度和标度
NUMERIC高精度数字类型,与 DECIMAL 相同
SERIAL自增整数类型,等效于 INTEGER + 自增序列
BIGSERIAL自增大整数类型,等效于 BIGINT + 自增序列
CHAR(n)固定长度字符类型
VARCHAR(n)可变长度字符类型,最大长度为 n
TEXT可变长度字符类型,没有长度限制
DATE日期类型,存储日期
TIME时间类型,不包含日期
TIMESTAMP时间戳类型,包含日期和时间
TIMESTAMPTZ带时区的时间戳类型
INTERVAL时间间隔类型
BOOLEAN布尔类型,TRUEFALSENULL
UUID通用唯一标识符类型
BINARY二进制数据类型
BYTEA二进制数据类型,与 BINARY 功能类似
JSONJSON 数据类型
JSONB二进制格式的 JSON 数据类型

sql常用函数

时间常用函数

  1. 获取当前时间
    SELECT CURRENT_DATE;  -- 当前日期
    SELECT CURRENT_TIME;  -- 当前时间
    SELECT CURRENT_TIMESTAMP;  -- 当前时间戳
    SELECT NOW();  -- 当前时间戳
    
    
  2. 提取日期和时间(EXTRACT ,DATE_TRUNC)
    SELECT EXTRACT(YEAR FROM current_date);    -- 提取当前年份
    SELECT EXTRACT(MONTH FROM current_date);   -- 提取当前月份
    SELECT EXTRACT(DAY FROM current_date);     -- 提取当前日期
    SELECT EXTRACT(HOUR FROM current_time);    -- 提取当前小时
    SELECT EXTRACT(MINUTE FROM current_time);  -- 提取当前分钟
    SELECT EXTRACT(SECOND FROM current_time);  -- 提取当前秒
    
    SELECT DATE_TRUNC('year', current_date);    -- 截取到今年年初
    SELECT DATE_TRUNC('month', current_date);   -- 截取到本月月初
    SELECT DATE_TRUNC('day', current_date);     -- 截取到今天
    SELECT DATE_TRUNC('hour', current_time);    -- 截取到当前小时
    
    
  3. 时间间隔函数(INTERVAL )
    SELECT CURRENT_DATE + INTERVAL '1 day';    -- 明天
    SELECT CURRENT_DATE - INTERVAL '1 day';    -- 昨天
    SELECT CURRENT_DATE + INTERVAL '1 month';  -- 下个月
    SELECT CURRENT_DATE - INTERVAL '1 month';  -- 上个月
    
  4. 时间格式化字符串(TO_CHAR)
    SELECT TO_CHAR(NOW(), 'YYYY-MM-DD HH24:MI:SS');  -- 格式化当前时间戳
    
  5. 字符串转时间(TO_DATE)
    SELECT TO_DATE('2024-07-07 00:00:00','YYYY-MM-DD');  -- 解析字符串为日期
    

时间常见用法

  • 获取当月起始日期
SELECT date_trunc('month', current_date) AS start_of_month;

  • 获取当月月份数字
SELECT extract(month FROM current_date) AS current_month;
  • 获取年:
SELECT extract(year FROM current_date) AS current_year;
  • 获取月份:
SELECT extract(month FROM current_date) AS current_month;
  • 获取天
SELECT extract(day FROM current_date) AS current_day;
  • 获取小时
SELECT extract(hour FROM current_time) AS current_hour;
  • 获取分钟
SELECT extract(minute FROM current_time) AS current_minute;
  • 获取秒
SELECT extract(second FROM current_time) AS current_second;
  • 获取本年到现在的所有月份
SELECT 
    to_char(month_start, 'YYYY-MM') AS month_name
FROM  (
    SELECT
        generate_series(
            date_trunc('year', current_date),  -- 从今年年初开始
            date_trunc('month', current_date), -- 到当前月份
            '1 month'::interval                -- 以每个月为间隔
        ) AS month_start
) as months
ORDER BY 
    month_start;
  • 查询近12个月(包括本月))

       SELECT 
        to_char(month_start, 'YYYY-MM') AS month_name
    FROM (
        SELECT
            generate_series(
                date_trunc('month', CURRENT_DATE) - INTERVAL '11 months',  -- 从 12 个月前的月初开始
                date_trunc('month', CURRENT_DATE),                          -- 到本月的月初
                '1 month'::interval                                       -- 每个月递增
            ) AS month_start
    ) AS months
    ORDER BY 
        month_start;
    

判空常用函数

  1. COALESCE

    -- 多个字符串,返回一个非空字符串
    COALESCE(expression1, expression2, ..., expressionN)
    
    SELECT COALESCE(description, '这是一个空字符串') AS middle_name
    FROM common_server.smx_common_sql;
    
    
  2. IS NULL和IS NOT NULL

    SELECT * FROM my_table WHERE column1 IS NULL;
    SELECT * FROM my_table WHERE column1 IS NOT NULL;
    
  3. case

    SELECT CASE WHEN column1 IS NULL THEN 'Default Value' ELSE column1 END FROM my_table;
    

类型转行函数

  1. 使用cast

    cast (num_no as VARCHAR)
    
  2. 使用 :: 操作符

    expression::VARCHAR
    
  3. 使用 TO_CHARTO_DATE 函数

  4. 使用 ARRAY 类型和 UNNEST 函数

    SELECT ARRAY[1, 2, 3, 4, 5] AS numbers;
    
    SELECT UNNEST(ARRAY[1, 2, 3, 4, 5]) AS number;
    
  5. 使用case

    CASE
        WHEN condition THEN result
        [WHEN ...]
        [ELSE result]
    END
    
  6. 自定义函数

    CREATE OR REPLACE FUNCTION to_uppercase(input TEXT)
    RETURNS TEXT AS $$
    BEGIN
        RETURN UPPER(input);
    END;
    $$ LANGUAGE plpgsql;
    
    SELECT to_uppercase('hello world');
    

多行转行函数

  1. STRING_AGG

    STRING_AGG(expression , separator ORDER BY employee_name ASC) -- expression 参数,separator 拼接符号
    
  2. ARRAY_AGG

    SELECT ARRAY_AGG(employee_name ORDER BY employee_name ASC ) AS employee_names FROM employees;
    

  3. 将数组转换为字符串

    SELECT ARRAY_TO_STRING( ARRAY_AGG(num_no ORDER BY num_no desc  ),separator ) 
    FROM my_table; -- 将数组转为 指定分隔符的数组
    
  4. UNNEST

    SELECT UNNEST(ARRAY[1, 2, 3, 4]);	
    
  5. LISTAGG pg:13以上可用

    LISTAGG(expression, separator) WITHIN GROUP (ORDER BY clause)
    

操作字符串(时间)函数

  1. **SUBSTRING** 函数

    SUBSTRING(string FROM start [FOR length])
    
    SELECT SUBSTRING('Hello, world!' FROM 1 FOR 5);  -- 结果: 'Hello' 
    SELECT SUBSTRING('Hello, world!' ,1 , 5);  -- 结果: 'Hello'
    -- 多种写法 从第一个开始截取5个字符串
    
  2. **LEFT** 函数

    LEFT(string, n)
    
    SELECT LEFT('Hello, world!', 5);  -- 结果: 'Hello'
    -- 从左边第一个开始 ,截取指定个数字符
    
  3. **RIGHT** 函数

RIGHT(string, n)

SELECT RIGHT('Hello, world!', 6);  -- 结果: 'world!'
-- 从右边第一个开始 ,截取指定个数字符
  1. **POSITION** 函数

    POSITION(substring IN string)  -- substring 在 string中的位置信息
    
    SELECT POSITION(',' IN 'Hello, world!');  -- 结果: 6
    
  2. **SPLIT_PART** 函数

    SPLIT_PART(string, delimiter, field)
    
    SELECT SPLIT_PART('Hello,world,here', ',', 2);  -- 结果: 'world'
    -- 把字符串按照delimiter 分割 按照field 取字符字串 从1开始
    
  3. **OVERLAY** 函数

    OVERLAY(string PLACING substring FROM start [FOR length]) 
    -- 从start 开始 截取length个字符 替换为substring
    
    SELECT OVERLAY('Txxxxas' PLACING 'ex' FROM 2 FOR 4);  -- 结果: 'Texas'
    
    
  4. **TRIM** 函数

    TRIM([BOTH | LEADING | TRAILING ] [characters FROM] string)
    -- BOTH 左右两边 LEADING 左边 TRAILING 右边 匹配到characters 转为空
    
    SELECT TRIM(BOTH ' ' FROM '   Hello, world!   ');  -- 结果: 'Hello, world!'
    SELECT TRIM(LEADING 'H' FROM 'Hello, world!');     -- 结果: 'ello, world!'
    SELECT TRIM(TRAILING '!' FROM 'Hello, world!!!');  -- 结果: 'Hello, world'
    
  5. **LPAD****RPAD** 函数

    LPAD(str, length, fill)
    -- 指定str 填充fill 在左边到指定字符长度 
    RPAD(str, length, fill)
    -- 指定str 填充fill 在右边边到指定字符长度 
    
    SELECT LPAD('Hello', 10, '-');  -- 结果: '-----Hello'
    SELECT RPAD('Hello', 10, '-');  -- 结果: 'Hello-----'
    
  6. **CONCAT**: 连接字符串

    SELECT CONCAT('Hello', ', ', 'world!');  -- 'Hello, world!'
    
  7. **LENGTH**: 返回字符串长度

    SELECT LENGTH('Hello, world!');  -- 13
    
  8. UPPER / LOWER: 转换为大写/小写

    SELECT UPPER('Hello, world!');  -- 'HELLO, WORLD!'
    SELECT LOWER('Hello, world!');  -- 'hello, world!'
    
  9. REPLACE: 替换字符串中的子串

    SELECT REPLACE('Hello, world!', 'world', 'PostgreSQL');  -- 'Hello, PostgreSQL!'
    
  10. REVERSE: 反转字符串

    SELECT REVERSE('Hello, world!');  -- '!dlrow ,olleH'
    
  11. INITCAP: 每个单词的首字母大写

    SELECT INITCAP('hello, world!');  -- 'Hello, World!'
    

标签:postgresql,--,数据库,month,current,sql,world,Hello,SELECT
From: https://blog.csdn.net/wanxingahlal/article/details/140488447

相关文章

  • MySQL数据库基本操作包括MySQL过程、MySQL声明
    MySQL数据库操纵数据库查看数据库showdatabases;创建数据库createdatabase<database_name>;删除数据库dropdatabase<database_name>;使用数据库usemysql操纵数据表查看数据表showtables;创建数据表CREATETABLETBL_USER(#创建user,tableU_IDINTPR......
  • mysql常用命令总结
    连接数据库格式mysql-h连接地址-u用户-p密码-P端口例如mysql-h127.0.0.1-uroot-p123456-P3310 常用用户管理操作https://dev.mysql.com/doc/refman/8.0/en/create-user.html创建用户CREATEUSER'用户名字'@'%'IDENTIFIEDBY'密码';例如CREATEUSER'wxh......
  • SQLite修改字段类型的方法
    SQLite不支持直接修改字段类型,如需要修改字段类型,可按以下方法处理:1、将要修改的字段名改名2、用新的类型添加字段3、复制原字段的内容4、删除旧字段procedureSQLiteAlter(TableName,ColName,NewFileType:string);varsql:string;beginsql:='ALTERTABLE'+TableN......
  • 一文了解MySQL的子查询
    文章目录☃️1.需求分析与问题解决❄️❄️1.1实际问题❄️❄️1.2子查询的基本使用❄️❄️1.3子查询的分类☃️2.单行子查询❄️❄️2.1单行比较操作符❄️❄️2.2代码示例❄️❄️2.3HAVING中的子查询❄️❄️2.4注意的问题☃️3.多行子查询❄️❄️3.1多行比较操作符❄️❄️3.2代码示例☃️4.相......
  • Python/Flask mysql 游标:为什么它不起作用?
    fromflaskimportFlaskfromflask_mysqldbimportMySQLapp=Flask(__name__)app.config['MYSQL_HOST']='localhost'app.config['MYSQL_USER']='root'app.config['MYSQL_PASSWORD']='password'a......
  • 安装pysqlcipher3的问题
    因此,尽管pipinstallpysqlcipher3工作返回Successfullyinstalledpysqlcipher3,但没有。根据我的研究,这似乎是Windows用户尝试安装Sqlcipher的常见问题。尝试#1首先,我尝试从github下载pysqlcipher3并通过cmd手动构建和安装它(使用python......
  • 将AWS RDS MySQL实例从存储未加密改为加密的方案
    问题描述:因为AWSRDS官方文档【1】中已经明确说明,MySQLRDS的存储为EBS卷,用KMS进行RDS加密有如下限制:您只能在创建RDS的时候,选择加密。对于已经创建的RDS实例,您无法将为加密的实例,直接改为加密实例。(文档【1】中的AmazonRDS加密的数据库实例的限制部分)因此,对于一个我们已......
  • SQL批量插入测试数据的几种方法?
    在开发过程中我们不管是用来测试性能还是在生产环境中页面展示好看一点,又或者学习验证某一知识点经常需要一些测试数据,这个时候如果手敲的话,十行二十行还好,多了就很死亡了,接下来介绍两种常用的MySQL测试数据批量生成方式 在SQL中,批量插入测试数据通常有几种方......
  • Oracle SQL:多字段组合去重技巧详解
    在Oracle数据库中,如果你需要根据多个字段的组合进行去重,最常用的几种方法是使用 DISTINCT 关键字、GROUPBY 子句,或者使用窗口函数 ROW_NUMBER()。1.使用 DISTINCT 关键字如果想要获取所有唯一的记录组合,可以使用 DISTINCT 关键字。这将返回指定列的唯一组合。SE......
  • 达梦数据库的系统视图v$dmwatcher
    达梦数据库的系统视图v$dmwatcher查询当前登录实例所对应的守护进程信息,注意一个守护进程可以同时守护多个组的实例,因此查询结果中部分字段(N_GROUP、SWITCH_COUNT)为守护进程的全局信息,并不是当前登录实例自身的守护信息。在DMDSC集群环境中,只显示控制守护进程的信息。另......