PostgreSQL的SQL语句中的双引号引发的问题

最近开发一个WEB的ETL工具需要用到不同的数据源。第一次用POSTGRESQL发现一个双引号引发的问题:

标准的SQL是不区分大小写的。但是PostgreSQL对于数据库中对象的名字允许使用支持大小写区分的定义和引用方法。方式就是在DDL中用双引号把希望支持大小的对象名括起来。
比如希望创建一个叫AAA的表。如果用CREATE TABLE AAA (...);的话,创建出来的表实际上是aaa。
如果希望创建大写的AAA表的话,就需要用CREATE TABLE "AAA" (...);这种双引号的方式定义对象名。
这样写的缺点是查询语句必须也使用双引号的方式引用对象名。比如SELECT * FROM "AAA";否则PostgreSQL缺省会去找aaa这个对象,然后返回aaa不存在的错误。需要注意的是不仅仅是表可以这样定义和引用,对PostgreSQL中的任意对象(比如列名,索引名等)都有效。


实际上传统的SQL都是不区分大小写的,所以只要DDL和DLL按照传统(不使用双引号)的方式操作数据库对象不会有任何问题。问题出在如果表是通过PostgreSQL的pgAdmin III 工具创建的话,缺省是按照有双引号的方式创建对象的,所以DLL里面必须也要按照有双引号的方式使用。但是这种写法不是标准的,如果是通过一些通用库函数访问数据库的话,会不被支持。


建议:
1.不推荐使用pgAdmin III这个工具创建数据库对象。还是应该手工编写DDL语句。
2.不推荐在DDL里用双引号的方式创建区分大小写的对象。
3.PostgreSQL给出的建议是SQL的key word用大写,其他的名称全部使用小写。

### 回答1: 在PostgreSQL,可以使用`||`运算符将字符串连接在一起。如果要连接一个字符串和一个单引号,您可以使用两个单引号来表示一个单引号。 例如,要将字符串`hello`和单引号 `'`连接在一起,您可以执行以下操作: ``` SELECT 'hello' || ''''; ``` 在此示例,`''''`表示两个单引号,一个表示字符串的结尾,另一个表示要连接的单引号。 请注意,如果要使用单引号作为字符串的字符,您也可以使用双引号将字符串括起来,如下所示: ``` SELECT 'This string contains a single quote: '''; SELECT "This string contains a single quote: '"; ``` 这两个查询都将返回以下字符串: ``` This string contains a single quote: ' ``` ### 回答2: 在PostgreSQL,可以使用两个单引号来进行字符串的拼接。通过使用两个单引号,可以在字符串插入一个单引号字符。 例如,如果我想将一个字符串 'Hello' 和另一个字符串 'World' 进行拼接,同在它们之间插入一个单引号字符,可以使用以下方法: SELECT 'Hello' || '''' || 'World'; 在上述语句,我使用了两个单引号字符,表示一个单引号字符的字符串,用来插入到拼接的字符串。 运行上述查询后,将返回拼接后的结果 'Hello''World'。 需要注意的是,为了正确拼接字符串并插入单引号字符,我们需要使用两个单引号字符 '',而不是一个双引号字符 ""。这是因为在SQL双引号字符通常用来引用表名、列名等标识符。 希望这个回答对您有所帮助! ### 回答3: 在PostgreSQL,我们可以使用两种方法来在SQL语句连接字符串和单引号。 第一种方法是使用两个竖线(||)操作符。该操作符用于连接两个字符串,并可以用来连接单引号。例如,要在字符串添加单引号,可以使用以下语法: ```sql SELECT '这是一个' || '''字符串''' || '。'; ``` 这将返回以下结果: ``` 这是一个'字符串'。 ``` 第二种方法是使用函数`concat()`。该函数接受多个参数,并将它们连接在一起,可以使用单引号作为参数。例如,要连接字符串和单引号,可以使用以下语法: ```sql SELECT concat('这是一个', '''字符串''', '。'); ``` 这将返回与前面相同的结果: ``` 这是一个'字符串'。 ``` 无论是使用竖线操作符还是`concat()`函数,都可以在SQL语句连接字符串和单引号,以便满足特定的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值