zoukankan      html  css  js  c++  java
  • pgsql动态创建table

    先上SQL

    CREATE OR REPLACE FUNCTION createtable_urllist_withdate()
      RETURNS varchar AS
    $BODY$
    declare 
        tableNameWithDate varchar;
        tableCreateSQL varchar;
        currentDate varchar;
    
    BEGIN
        SELECT INTO currentDate to_char(current_date, 'yyyymmdd');
    
        tableNameWithDate:= 'tb_url_list_'||currentDate;
    
        if not exists(select 1 from pg_tables where tablename = tableNameWithDate)
        then
        tableCreateSQL := 'create table ' || tableNameWithDate || '(
        id  integer primary key,
        URLlevel integer,
        URL varchar(100),
        title varchar(50)
        )';
        RAISE NOTICE '开始创建表%',tableCreateSQL;
            EXECUTE(tableCreateSQL);
        RAISE NOTICE '成功创建表%',tableCreateSQL;
        end if;
    
        return tableNameWithDate;
    
    end;
    $BODY$
      LANGUAGE plpgsql VOLATILE
      COST 100;
    ALTER FUNCTION createurltablewithdate()
      OWNER TO postgres;
       
    

    1.SELECT INTO

    生成多个列(但只有一行)的SELECT命令的结果可以赋予一个记录变量, 行类型变量,或者一个标量变量的列表。这是用下面方法实现的:

    SELECT INTO target select_expressions FROM ...;

    这里的 target 可以是一个记录变量, 行变量,或者一个用逗号分隔的简单变量和记录/行字段的列表。 select_expressions 和命令的剩余部分和普通 SQL 一样。

    请注意这个构造和 PostgreSQL 普通的SELECT INTO构造的解释是不一样的, 后者的INTO目标是一个新创建的表。 (如果你想在 PL/pgSQL 函数里从一个SELECT 的结果中创建一个表,那么使用 CREATE TABLE ... AS SELECT 语法。)

    也就是说如果是平时使用sql的时候,如果使用select into是插入一个表,但是在pgsql中使用的时候就是插入一条记录

    2.字符串操作符

    字符串连接符: ||

    字符串长度:bit_length(字段),char_length(字段)--中文字符算一个字长,octet(字段)--中文字符按编码算字长,例如UTF-8则一个中文字符一般是3个字长

    字符串替换:overlay(字段 placing 替换string from int [for int]) 例如:select overlay(lastname placing 'gg' from 7 for 2)意思是将lastname字段中的值从第7个字符开始,用'gg'替换两个字符

    字符串中某个字符的位置: position(substring in string) 例如:select position('g' in lastname)

    字符串截取: substring(string from int [for int])例如:select substring(lastname from 2 for 2);substring(string from pattern)例如:select substring(lastname from '^..')

    字符串大小写:lower(string),upper(string)

    字符串中删除某个字符串 trim(substring from string)默认为空白符 例如:trim('123' from lastname)

    通过ascii返回字符,或者通过字符返回ascii 例如:select ascii('a'); select chr('97')

    3.刚开始的时候我直接创建table,发现不能给表名动态赋值。后来查了下,通过迂回能够实现,先将"create table……"字符串赋值给一个临时变量,这个时候表名已经生成,并且赋值给了临时变量,然后使用EXECUTE(string)执行。

    一个比较详细的postgresql中文文档资料链接:http://www.kuqin.com/postgreSQL8.1_doc/

  • 相关阅读:
    微信公众号迁移配置注意点
    关于memcache 命令查看和 Telnet
    centOS 安装(光安装 和 u盘安装)
    CentOS删除自带的java,安装新java
    ubuntu常用命令
    ubuntu 的挂起与休眠
    saiku应用的调试
    数据挖掘123
    unbutu 安装java教程
    workbench的schema讲解一:(维度dimension设置的基本内容)
  • 原文地址:https://www.cnblogs.com/charlexu/p/2954277.html
Copyright © 2011-2022 走看看