Oracle SQL字符串中的双引号

ia2d9nvy  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(160)

这个问题是来自超级用户的migrated,因为它可以在Stack Overflow上回答。Migrated上个月。
对于Oracle SQL,字段名称需要如下所示:"DateOfCreation"(在sql字符串中带引号),然后我加上+(34),它看起来像这样""DateOfCreation""(带两个双引号)。我也试过用REPLACE,但它不起作用!
就应该这样
Select * from VW_Details where to_date("DateOfCreation", 'DD-MM-YYYY HH24:MI:SS') > to_date('01/09/2023 10:41:07', 'DD-MM-YYYY HH24:MI:SS')

rsaldnfx

rsaldnfx1#

对于Oracle SQL,字段名称需要如下所示:“DateOfCreation”(SQL字符串中带有引号)
引用数据库对象名称和标识符文档:

数据库对象配置规则

每个数据库对象都有一个名称。在SQL语句中,用带引号的标识符或不带引号的标识符表示对象的名称。

  • 带引号的标识符以双引号(“)开头和结尾。如果使用带引号的标识符命名模式对象,则在引用该对象时必须使用双引号。
  • 未加引号的标识符不会被任何标点符号包围。

可以使用带引号或不带引号的标识符来命名任何数据库对象。
以及:
1.非引号标识符只能包含数据库字符集中的字母数字字符以及下划线(_)、美元符号($)和磅号(#)。数据库链接还可以包含句点(.)和“at”符号(@)。Oracle强烈建议您不要在非引号标识符中使用$和#。
引用标识符可以包含任何字符、标点符号和空格。但是,带引号和不带引号的标识符都不能包含双引号或空字符(\0)。
规则#7的最后一句明确指出,双引号不能是标识符的一部分(引用或不引用);所以,你的要求是不可能的,因为命名规则不允许。
您可以将列命名为DateOfCreation,混合大小写,并假设它具有DATE数据类型,那么您可以使用带引号的标识符通过查询访问它:

Select *
from   VW_Details
where  "DateOfCreation" > to_date('01/09/2023 10:41:07', 'DD-MM-YYYY HH24:MI:SS')
  • 注意:切勿在已经是DATE的列上使用TO_DATE。往好里说,它是一个毫无意义的函数调用,实际上什么也不做,往坏里说,它会导致查询引发异常或给予意外的结果。

但是你不能调用列"DateOfCreation",并且试图在标识符中使用双引号在语法上是无效的:

Select *
from   VW_Details
where  ""DateOfCreation"" > to_date('01/09/2023 10:41:07', 'DD-MM-YYYY HH24:MI:SS')

ORA-01741: illegal zero-length identifier会失败。

相关问题