Oracle 在Where子句中使用Date

Oracle 在Where子句中使用Date,oracle,sql-update,Oracle,Sql Update,我试图在where子句中放置一个日期。我想更新日期列在某个日期之前或之后的所有行。如何指定我只想更新这些列。以下是我到目前为止没有包含特定列名的编码: update table1 set column1 = value where (select date from table2) < date; 我走对了吗 另外,有人能解释一下SQL和PL/SQL之间的区别吗。目前我正在学习PL/SQL。每当我在这个论坛上发布一个问题时,我会说我有一个关于PL/SQL的问题,但是回答我问题的人会说某个

我试图在where子句中放置一个日期。我想更新日期列在某个日期之前或之后的所有行。如何指定我只想更新这些列。以下是我到目前为止没有包含特定列名的编码:

update table1
set column1 = value
where (select date from table2) < date;
我走对了吗

另外,有人能解释一下SQL和PL/SQL之间的区别吗。目前我正在学习PL/SQL。每当我在这个论坛上发布一个问题时,我会说我有一个关于PL/SQL的问题,但是回答我问题的人会说某个函数-update/if/case/etc-是SQL语句而不是PL/SQL语句。有什么区别

-尼尔

你的最新声明

update table1
set column1 = value
where (select date from table2) < date;
您可以将日期格式掩码调整为您喜欢的任何数据格式。to_date将从char转换为date类型,而to_char将执行相反的操作


SQL是一种标准化的查询语言,所有兼容的关系数据库都支持它,有时还带有一些专有的扩展。SQL不是一种编程语言。PL/SQL是Oracle上支持的过程编程语言,只有Postgres具有类似的语法。PL/SQL是SQL+常规编程语言特性,如条件语句if/else、循环for、函数和过程等。当单独使用SQL获取某些数据太困难或不可能时,就会使用PL/SQL。

正如Aleksey所提到的,您的查询是正确的,但您需要[1]围绕子SQL设置条件,以便只返回一条记录,或者[2]确保表2中的数据在运行时只有一条记录

如果您必须引用您的WHERE子句中的另一个表中的数据,请考虑SQLServer……/P>中的显式联接示例。

update t1
set t1.column1 = value -- <-- some arbitary value here I assume?
from table1 t1
   inner join table2 t2
      on (t2.key = t1.key) -- you need to specify the primary keys of the tables here
where t2.date < t1.date

这样,您就不会假设表2只有一条记录。它可以有许多记录,只要它们通过键/索引与表1相关,WHERE子句可以确保您仅根据表2中日期小于表1中日期的数据进行更新。

我应该提到,我在WHERE子句中写入日期的方式是:to_DATE01/02/2012;这是写入日期数据类型的正确方法吗?PL/SQL专门用于存储过程、函数和触发器。SQL本质上是在存储过程之外编写的任何内容。这些都在手册中有很好的说明。您开始学习SQL,并最终转到PL/SQL和高级PL/SQL。您在where子句中指定了哪些日期?两者都没有真正意义;如果第一个那么子选择是无意义的,如果第二个那么。。。当然,subselect也没有意义,但是您还将更新表1中的所有行或无行。使用固定日期时,应根据您所在的地区指定日期“2013年2月1日”、“DD/MM/YYYY”或MM/DD/YYYY”的格式,或指定ANSI标准日期“2013-01-02”。加PL/SQL是SQL加上过程的东西……SQL是4GL,PL/SQL是3GL。PL/SQL允许本机嵌入SQL,但通常PL/SQL中的SQL不被认为是PL/SQL语言的一部分;将它们看作具有不同但互补的特征和能力的独立语言更有帮助。如果不使用Oracle,但SQLServer,那么PL/SQL等价物是SQL SQLServer存储过程中的T-SQL。
update t1
set t1.column1 = value -- <-- some arbitary value here I assume?
from table1 t1
   inner join table2 t2
      on (t2.key = t1.key) -- you need to specify the primary keys of the tables here
where t2.date < t1.date