如何正确地将旧日期插入表格?

Posted

技术标签:

【中文标题】如何正确地将旧日期插入表格?【英文标题】:How to insert old date into a table correctly? 【发布时间】:2017-03-20 16:03:08 【问题描述】:

我正在尝试将旧日期 (01/01/1888) 插入 pl/sql 代码中的表中,但我只插入了值 (01/01/1988)。 将这个旧日期插入表格的正确方法是什么?

declare
  p_date date;
  p_eventDate date;
  sql_str varchar2(2000);
begin
   select to_date('01-01-1888','dd-mm-yyyy') into p_eventDate from dual;

   p_date := add_months(sysdate,-60);

   if( p_eventDate < p_date)
   then
       sql_str := 'insert into test_date values (''' ||p_eventDate ||''')';
       sql_str := 'insert into test_date values (to_date(''' ||p_eventDate ||''',''dd-mm-yyyy''))';
   else
      sql_str := 'insert into test_date values (''' ||p_date ||''')';
   end if;

   EXECUTE IMMEDIATE sql_str;

   commit;
  --dbms_output.put_line(sql_str);
end;

当我检查表 test_date 时,插入的值是 01/01/1988 和 01/01/0088。

谢谢!

【问题讨论】:

【参考方案1】:

我认为你的代码可以简化。

如果我理解得很好,你需要从两个变量中插入最小值;如果是,则不需要动态 SQL:

declare
  p_date date;
  p_eventDate date;
begin
   select to_date('01-01-1888','dd-mm-yyyy') into p_eventDate from dual;

   p_date := add_months(sysdate,-60);

   insert into test_date(d) values ( least(p_date, p_eventDate));

   commit;
end;

撇开动态 SQL 不谈,您的代码中的主要问题是您在字符串中使用日期而不强制转换它们,因此依赖于隐式转换。

如果出于某种原因,您想使用动态 SQL,一个好方法是使用绑定变量,例如:

...
sql_str := 'insert into test_date values (:1)';
execute immediate sql_str using someVariable;
...

如果你想保持代码的结构,你的 SQL 字符串应该是:

sql_str := 'insert into test_date values ( to_date(''' || to_char(p_date, 'dd-mm-yyyy') || ''', ''dd-mm-yyyy''))';

也就是说,您首先必须将 date 变量转换为字符串,使用它来连接您的语句,然后在您的语句中将字符串转换回 date 类型。

【讨论】:

对不起,我给你举了一个不好的例子。尽量简单,我从我的程序中删除了很多其他代码。我必须使用代码'sql_str :='insert into test_date values ( ''' ||p_eventDate ||''')';'然后在我的过程结束时根据其他条件立即执行 sql_str,我不能使用“使用 someVariable 立即执行 sql_str;”执行它。谢谢! 这解决了我的问题。谢谢! 如果你不需要时间组件就更简单了(即时间是 00:00:00),'insert into test_date values (date ''' || to_char(p_date, 'yyyy-mm-dd') || ''')'.

以上是关于如何正确地将旧日期插入表格?的主要内容,如果未能解决你的问题,请参考以下文章

如何在wps表格中插入日历表

如何知道我在 SQL Server 中使用插入触发器的最后日期?

excel表格日历控件怎么添加

怎样在excel表格中 插入日历 达到可选日期的效果

excel表格自动排序如何设置

jquery中的dataTable表格控件中如何插入超链接或者按钮?