【问题标题】:How can I check the format of my date?如何检查我的日期格式?
【发布时间】:2015-11-10 11:58:27
【问题描述】:

我有一张表,我想根据YYYYMMDD,HH24MISS检查记录的日期时间格式。如果我的记录的日期时间格式不正确,请写一条错误消息。如何在 PL/SQL 中创建函数或过程?

【问题讨论】:

  • 如果您使用原生格式(例如date)存储值,那么您不必担心格式。
  • 此列的数据类型? if date - 格式将根据 nls_date_format 参数。如果您想以其他格式为本专栏提供鞋履 - 只需使用 to_char 函数
  • 你是对的,但我没有存储这些记录,我需要检查它。你有什么想法吗?
  • 例如这是我的日期 => 10/06/2013 11:05:55 。我想检查一下日期格式是否正确?

标签: sql oracle date plsql


【解决方案1】:

你可以这样写一个函数:

CREATE OR REPLACE FUNCTION CheckDateString(str IN VARCHAR2) RETURN DATE IS
BEGIN
    RETURN TO_DATE(str,'YYYYMMDD,HH24MISS');
EXCEPTION
    WHEN OTHERS THEN 
        RETURN NULL;
END CheckDateString;

并像这样使用它

SELECT *
FROM my_table
WHERE CheckDateString(DATE_STRING) IS NULL 
    AND DATE_STRING IS NOT NULL;

当然,下一个行动点是更正错误的值并将该列的数据类型更改为DATE,分别。 TIMESTAMP.

【讨论】:

  • 谢谢@Wernfried Domscheit。我曾经像这样更改数据类型 SELECT * FROM my_table WHERE CheckDateString(to_number(to_char(CRTTAR,'YYYYMMDDHH24MISS'))) IS NULL AND CRTTAR IS NOT NULL;
  • 输入数据类型应该是VARCHAR,我改了。
  • 对于你的函数,你认为 10/06/2013 11:05:55 这个日期的返回值是多少?
  • 您没有要求dd/mm/yyyy hh24:mi:ss 格式。根据您的问题,格式为YYYYMMDD,HH24MISS,对应于20130610,110555
  • 我完全理解你 :) 我应该想到这一点。非常感谢
【解决方案2】:

如果您的列是 VARCHAR2 并且您需要检查其中的值是否可以使用您想要的格式转换为日期,这可能是一个解决方案:

declare
  v_foo_date date;
begin
  for r_date in (
    select date_col from my_table
  ) loop
      begin 
        v_foo_date := to_date(r_date.date_col, 'YYYYMMDD,HH24MİSS');
        exception when others then
           dbms_output.put_line('error in validating value ' || r_date.date_col);
      end;
  end loop;
end;

【讨论】:

    【解决方案3】:

    如果您想获取具有所需格式的数据,也许您可​​以执行以下操作: 否则我会选择 Wernfried Domscheit 的答案。

    1. 将日期转换为表格中的日期时间

      select *, cast(yourDateColumn as datetime) as verifiedDate into #tempTable from yourTable

    2. 然后将yourTable 中的数据与#tempTable 中的数据进行对比

      select * from yourTable yt inner join #tempTable tt on yt.yourDateColum = tt.verifiedDate and yt.ID = tt.ID

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-25
      • 2011-04-06
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      相关资源
      最近更新 更多