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/

posted @ 2013-03-11 16:51  三句对白  阅读(3156)  评论(0编辑  收藏  举报