Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да обработваме изключенията to_date в оператор SELECT, за да игнорирате тези редове?

Повтаряйки коментара на Тони, ще бъде много по-добре да съхранявате дати в колони DATE, вместо да принуждавате инструмент за заявки от предния край да намира и обработва тези изключения.

Ако обаче сте останали с неправилен модел на данни, най-простата опция в по-ранните версии е да създадете функция, която извършва преобразуването и обработва грешката,

CREATE OR REPLACE FUNCTION my_to_date( p_date_str IN VARCHAR2,
                              p_format_mask IN VARCHAR2 )
  RETURN DATE
IS
  l_date DATE;
BEGIN
  l_date := to_date( p_date_str, p_format_mask );
  RETURN l_date;
EXCEPTION
  WHEN others THEN
    RETURN null;
END my_to_date;

Тогава вашата заявка ще стане

SELECT * 
  FROM myTable
 WHERE my_to_date(myTable.sdate, 'MM/dd/yyyy') <= {?EndDate}

Разбира се, най-вероятно бихте искали индекс, базиран на функции на MY_TO_DATE обадете се, за да направите тази заявка сравнително ефективна.

В 12.2 Oracle добави разширения към to_date и cast функции за обработка на преобразувания с тази грешка

SELECT * 
  FROM myTable
 WHERE to_date(myTable.sdate default null on conversion error, 'MM/dd/yyyy') <= {?EndDate}

Можете също да използвате validate_conversion функция, ако търсите всички редове, които са (или не са) валидни дати.

SELECT *
  FROM myTable 
 WHERE validate_conversion( myTable.sdate as date, 'MM/DD/YYYY' ) = 1 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ODP.NET управляваната библиотека разрешава псевдоним, но 32-битовата библиотека го прави

  2. Как да разрешите липсващия израз ORA-00936

  3. Изчисляване на възрастта от рожден ден със задействане на oracle plsql и вмъкване на възрастта в таблицата

  4. Използването на IS NULL или IS NOT NULL при условия на присъединяване - Теоретичен въпрос

  5. Как да изчислим средната стойност на колона и след това да я включим в заявка за избор в oracle?