PostgreSQL中的撇号和报价 - 如何取代撇号?

jac*_*des 2 sql postgresql syntax case-sensitive

这是在一个查询字符串中的角色apostrophequotation mark在SQL?如何apostrophe更换?

主要兴趣是他们在PostgreSQL中的特定角色.

离开apostrophe了食堂SQL查询,例如,:

SELECT role FROM "USER_ROLES" WHERE "USER_ROLES".login = admin;
Run Code Online (Sandbox Code Playgroud)

当admin是值时,获取'列'管理员不存在错误.写'admin'可以解决问题:

SELECT role FROM "USER_ROLES" WHERE "USER_ROLES".login = 'admin';
Run Code Online (Sandbox Code Playgroud)

实际问题是在另一个上下文中使用查询:

<module-option name="rolesQuery" value="SELECT 'role', 'Roles' FROM &quot;USER_ROLES&quot; WHERE login='?'"/>
Run Code Online (Sandbox Code Playgroud)

根据要求,表定义是:

CREATE TABLE "USER_ROLES" (
  login text NOT NULL,
  role text,
  CONSTRAINT "USER_ROLES_pkey" PRIMARY KEY (login ),
  CONSTRAINT "USER_ROLES_login_fkey" FOREIGN KEY (login)
      REFERENCES "USER" (login) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
Run Code Online (Sandbox Code Playgroud)

PostgreSQL版本9.1.

Erw*_*ter 8

你可以用PostgreSQL中的美元引用替换单引号('),以避免它们在不同的上下文中的特殊含义.(不过,不确定美元符号是否也有特殊含义):

<module-option name="rolesQuery" value="SELECT role FROM &quot;USER_ROLES&quot; WHERE login = $$?$$"/>
Run Code Online (Sandbox Code Playgroud)

另一个想法是用来&apos;代替单引号:

<module-option name="rolesQuery" value="SELECT role FROM &quot;USER_ROLES&quot; WHERE login = &apos;?&apos;"/>
Run Code Online (Sandbox Code Playgroud)