技术标签: postgresql pg PostgreSQL之SQL语言
作者:瀚高PG实验室 (Highgo PG Lab)- 瀚高大李
PostgreSQL是世界上功能最强大的开源数据库,在国内得到了越来越多机构和开发者的青睐和应用。随着PostgreSQL的应用越来越广泛,Oracle向PostgreSQL数据库的数据迁移需求也越来越多。数据库之间数据迁移的时候,首先是迁移数据,然后就是SQL、存储过程、序列等程序中不同的数据库中数据的使用方式的转换。下面根据自己的理解和测试,写了一些SQL以及数据库对象转换方面的文章,不足之处,尚请多多指教。
NVL2(expr1, expr2, expr3) 是Oracle的一个NULL判断函数。当expr1 不为 NULL时,返回expr2;为NULL时,返回 expr3。
PostgreSQL中没有对应的函数。 可以使用case when实现相同的意思。
Oracle NVL2
SQL> select * from o_test;
ID NAME AGE
---------- ---------- ----------
1
2
2 zhangsan 18
SQL> select nvl2(name, '有人', '无人') FLG from o_test;
FLG
----
无人
无人
有人
SQL> select case when name is not null then '有人' else '无人' end FLG from o_test;
FLG
----
无人
无人
有人
PostgreSQL CASE
postgres=# select * from p_test;
id | name | age
----+----------+-----
1 | |
2 | |
2 | zhangsan | 18
(3 行记录)
postgres=# select case when name is not null then '有人' else '无人' end FLG from p_test;
flg
------
无人
无人
有人
(3 行记录)
LNNVL(condition) 是Oracle中进行条件判断的一个函数。当条件返回true时,返回false。当条件为unknow或者返回false的时候返回true。类似于 CASE XXX WHEN is null or is not true THEN true ELSE false END。
PostgreSQL中,没有对应的函数,只能使用CASE WHEN函数进行模拟。
Oracle LNNVL
SQL> select * from o_test;
ID NAME AGE
---------- ---------- ----------
1
2
2 zhangsan 18
SQL> select case when lnnvl(name = 'zhangsan') then '无人' else '有人' end flg from o_test;
FLG
----
无人
无人
有人
SQL> select case when name = 'zhangsan' then '有人' else '无人' end FLG from o_test;
FLG
----
无人
无人
有人
PostgreSQL CASE WHEN
postgres=# select * from p_test;
id | name | age
----+----------+-----
1 | |
2 | |
2 | zhangsan | 18
(3 行记录)
postgres=# select case when name ='zhangsan' then '有人' else '无人' end FLG from p_test;
flg
------
无人
无人
有人
(3 行记录)
BITAND(expr1, expr2)函数是Oracle里面的一个对于数字按位进行 AND 运算的函数。
PostgreSQL中没有对应的函数,可以直接使用 a&b的方式进行模拟。
Oracle BITAND
SQL> SELECT BITAND(6,3) FROM dual;
BITAND(6,3)
-----------
2
SQL> SELECT BITAND(6, 5) FROM dual;
BITAND(6,5)
-----------
4
PostgreSQL 数字按位与运算
postgres=# SELECT BITAND(6,3) ;
错误: 函数 bitand(integer, integer) 不存在
第1行SELECT BITAND(6,3) ;
^
提示: 没有匹配指定名称和参数类型的函数. 您也许需要增加明确的类型转换.
postgres=# select 6&3;
?column?
----------
2
(1 行记录)
postgres=# select 6&5;
?column?
----------
4
(1 行记录)
REMAINDER(n2, n1) 是 Oracle的一个计算余数的函数。它返回 n2/n1 的余数。 和MOD的不同的地方在于: REMAINDER相当于n2-n1 ROUND(n2/n1)。而MOD相当于n2-n1 FLOOR(n2/n1)。
PostgreSQL中没有这个 函数。可以使用它的元计算式n2-n1* ROUND(n2/n1)的 形式模拟它。
Oracle REMAINDER
SQL> Select remainder(3.5,2) from dual;
REMAINDER(3.5,2)
----------------
-.5
SQL> select 3.5 - 2 * ROUND(3.5/2) from dual;
3.5-2*ROUND(3.5/2)
------------------
-.5
SQL> select mod(3.5, 2) from dual;
MOD(3.5,2)
----------
1.5
PostgreSQL 数字按位与运算
postgres=# select remainder(3.5, 2);
错误: 函数 remainder(numeric, integer) 不存在
第1行select remainder(3.5, 2);
^
提示: 没有匹配指定名称和参数类型的函数. 您也许需要增加明确的类型转换.
postgres=# select 3.5 - 2 * ROUND(3.5/2) ;
?column?
----------
-0.5
(1 行记录)
postgres=# select mod(3.5, 2) ;
mod
-----
1.5
(1 行记录)
Oracle的SYSDATE是去当前的日期的一个函数。返回值只有年月日。取得当前时间戳的函数是CURRENT_TIMESTAMP,返回当前的时间戳。
PostgreSQL中,可以使用CURRENT_DATE来对应SYSDATE。至于CURRENT_TIMESTAMP,PostgreSQL也支持。也可以使用now()来对应它。
Oracle SYSDATE、CURRENT_TIMESTAMP
SQL> select sysdate from dual;
SYSDATE
--------------
22-8月 -16
SQL> select current_timestamp from dual;
CURRENT_TIMESTAMP
---------------------------------------------------------------------------
22-8月 -16 10.28.25.223000 上午 +08:00
PostgreSQL CURRENT_DATE、CURRENT_TIMESTAMP、NOW()
postgres=# select current_date;
date
------------
2016-08-22
(1 行记录)
postgres=# select current_timestamp;
now
-------------------------------
2016-08-22 10:28:56.689154+08
(1 行记录)
postgres=# select now();
now
-------------------------------
2016-08-22 10:29:00.466176+08
(1 行记录)
文章浏览阅读779次,点赞19次,收藏24次。springboot微信小程序的小疾病问诊服务系统的设计与实现。springboot基于spring的物业管理系统的设计与实现。springboot基于Java的高校学生请假系统。ssm基于Android的购物商场APP设计与实现。springboot基于微信小程序的智慧校园系统。ssm基于Android的英语词典的设计与开发。ssm基于SSM+Vue的学生实践管理平台开发。ssm基于android的企业员工考勤系统。ssm基于web的暗香小店系统的设计与实现。ssm基于Web的高等学校公费医疗管理系统。
文章浏览阅读2.3w次,点赞15次,收藏63次。hover属性用不同的书写方式,来改变不同关系的元素样式。元素:hover 表示聚焦后改变自己元素:hover 元素 表示聚焦后改变其子元素元素:hover + 元素 表示聚焦后改变其指定的“亲兄弟”(条件是该兄弟元素与其相邻)元素元素:hover ~ 元素 表示聚焦后改变其指定的兄弟元素,两个元素相不相邻都行。示例:.first:hover {color: white;}/* 聚焦我改变自己 */.three:hover .three-son {font-size: 20px._css hover的用法
文章浏览阅读6k次,点赞3次,收藏15次。coursera-斯坦福-机器学习-吴恩达-第8周笔记-无监督学习coursera-斯坦福-机器学习-吴恩达-第8周笔记-无监督学习1聚类算法clutering1聚类算法简介2K-means21kmeans的目标函数22随机初始化23选择类别数3考试quiz维数约减 dimensionality reduction1数据压缩2数据可视化3维度约简-主成分分析法PCA1 PCA_pca反向压缩
文章浏览阅读5.2k次。一、插件安装Vundle是vim的一个插件管理器, 同时它本身也是vim的一个插件。插件管理器用于方便、快速的安装、删除、Vim更新插件。mkdir -p ~/.vim/bundlegit clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim管理器安装完成后,vim ~/.vimrc命令创建.vimrc文件syntax on" tab宽度和缩进同样设置为4set tabstop=4set softta_bxbx.vim
文章浏览阅读7.2w次,点赞10次,收藏41次。本文适用于当前面临java.lang.ClassNotFoundException挑战的Java初学者。 它将为您提供此常见Java异常的概述,这是一个示例Java程序,可支持您的学习过程和解决策略。 如果您对与更高级的类加载器相关的问题感兴趣,我建议您复习有关java.lang.NoClassDefFoundError的文章系列,因为这些Java异常密切相关。 java.lang..._java.lang.classnotfoundexception:
文章浏览阅读1.2k次,点赞9次,收藏17次。不同的设备间建立连接往往需要通信,而串口通信是十分常用的一种。UART串口通信需要两根线来实现,一根用于串口发送,另外一更用于串口接收。UART串口发送或者接收过程中一帧数据包括1位起始位、8位数据位、1位停止位,为了提高数据的可靠性可以在停止位前加上1位奇偶校验位。串口通信虽然十分简单,但是在不同设备间发送的数据往往不止1个字节,往往需要多个字节组成的数据包。当我们按照数据包发送时我们需要考虑到以及,因此我们可以采用定义数据帧的方式解决上述两个问题。_一帧数据
文章浏览阅读987次,点赞20次,收藏19次。偏微分方程PDE图像去噪(含SNR)完整的代码,方可运行;可提供运行操作视频!适合小白!_pdnet 深度学习 偏微分方程 去噪
文章浏览阅读6.6w次,点赞128次,收藏962次。Ubuntu18.0详尽版安装教程下载Ubuntu18.04下载VMware Workstation安装虚拟机下载Ubuntu18.04官方网站:http://old-releases.ubuntu.com/releases/18.04.4/?_ga=2.44113060.1243545826.1617173008-2055924693.1608557140下载VMware Workstation这个在网上有很多教程下载,这里我就不写了,我用的版本是14 pro。如下图:安装虚拟机1、打开_ubuntu18安装
文章浏览阅读1.7k次。1. 概览Activity的管理有静态和动态两层涵义: 静态是指Activity的代码组织结构,即Application中声明的Activity的集合,这些Activity被组织在一个APK中,有特定的包名。 在编写应用程序时,Activity对应到用户界面,它定义了用户界面的布局、交互行为、启动方式等,最重要的,是Activity的生命周期函数。 在应用进程看来,只需要按照Android定义的规范,实现生命周期函数的具体逻辑即可,所有的用户界面都遵循同一个规范。 编写完一个应用程序的所有用户界面_android activityrecord中的activitytype
文章浏览阅读5.5k次,点赞3次,收藏7次。sed 查找不包含某个特性 sed -i "/src/!s/xxx/bbb/g" xxx将不包含src的行中的xxx替换为bbb_sed不包含字符串
文章浏览阅读6.8k次,点赞11次,收藏18次。问题解决:shared_ptr Assertion px != 0 failed及debug经验分享问题详细描述:/usr/include/boost/smart_ptr/shared_ptr.hpp:646: typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = pcl::PointCloudpcl::pointxyz; typename boost::detail::sp_typename boost::detail::sp_dereference::type boost::shared_ptr::operat
文章浏览阅读553次。编者按:在这个万物智联的时代,无论是在线网络购物,还是网络强国、数字中国建设,都离不开一张“看不见的网”——基础设施网络。2009年,首届双11每秒交易订单创建峰值400;2021年,双11每秒交易订单创建峰值58.3万,12年交易数字量猛增的背后,是阿里云在庞大分布式系统上计算和IO能力的飞跃,更离不开阿里云基础设施底层网络技术的支撑。图|阿里云全球基础设施网络系统作为阿里云基础设施的重要组成部分,阿里云基础设施网络团队负责整个阿里云全球基础设施网络,包括大规模高性能数据中心网络,全球数据中心互联_阿里云网络基线理解