Oracle VALIDATE_CONVERSION() 函数使用指南

Oracle VALIDATE_CONVERSION() 是一个内置函数,它用于确定是否可以将给定的表达式转换为给定的数据类型。

Oracle VALIDATE_CONVERSION() 语法

这里是 Oracle VALIDATE_CONVERSION() 函数的语法:

VALIDATE_CONVERSION(expr AS type_name
  [, fmt [, 'nlsparam' ] ])

参数

expr

必需的。它指定一个 SQL 表达式。

type_name

必需的。它指定要将 expr 转换为的数据类型。

fmt

可选的。格式化字符串。

'nlsparam'

可选的。您可以使用这个 'NLS_DATE_LANGUAGE = language' 形式设置此参数,其中 language 是语言名称。

对于 type_name,您可以指定以下数据类型:

  • BINARY_DOUBLE

    如果指定了 BINARY_DOUBLE,则 expr 可以是任何求值为 CHARVARCHAR2NCHARNVARCHAR2 数据类型的字符字符串,或者类型为 NUMBERBINARY_FLOATBINARY_DOUBLE 的数字值。可选的 fmtnlsparam 参数与 TO_BINARY_DOUBLE 函数具有相同的作用。有关更多信息,请参见 TO_BINARY_DOUBLE

  • BINARY_FLOAT

    如果指定了 BINARY_FLOAT,则 expr 可以是任何求值为 CHARVARCHAR2NCHARNVARCHAR2 数据类型的字符字符串,或者类型为 NUMBERBINARY_FLOATBINARY_DOUBLE 的数字值。可选的 fmtnlsparam 参数与 TO_BINARY_FLOAT 函数具有相同的作用。有关更多信息,请参见 TO_BINARY_FLOAT

  • DATE

    如果指定了 DATE,则 expr 可以是任何求值为 CHARVARCHAR2NCHARNVARCHAR2 数据类型的字符字符串。可选的 fmtnlsparam 参数与 TO_DATE 函数具有相同的作用。有关更多信息,请参见 TO_DATE

  • INTERVAL DAY TO SECOND

    如果指定了 INTERVAL DAY TO SECOND,则 expr 可以是任何计算为 CHARVARCHAR2NCHARNVARCHAR2 数据类型的字符字符串表达式,并且必须包含 SQL 间隔格式或 ISO 时长格式中的值。对于此数据类型,可选的 fmtnlsparam 参数不适用。有关 SQL 间隔格式和 ISO 时长格式的详细信息,请参阅 TO_DSINTERVAL

  • INTERVAL YEAR TO MONTH

    如果指定了 INTERVAL YEAR TO MONTH,则 expr 可以是任何计算为 CHARVARCHAR2NCHARNVARCHAR2 数据类型的字符字符串表达式,并且必须包含 SQL 间隔格式或 ISO 时长格式中的值。对于此数据类型,可选的 fmtnlsparam 参数不适用。有关 SQL 间隔格式和 ISO 时长格式的详细信息,请参阅 TO_YMINTERVAL

  • NUMBER

    如果指定了 NUMBER,则 expr 可以是任何计算为 CHARVARCHAR2NCHARNVARCHAR2 数据类型的字符字符串表达式,或者是 NUMBERBINARY_FLOATBINARY_DOUBLE 类型的数值。可选的 fmtnlsparam 参数的作用与 TO_NUMBER 函数相同。有关详细信息,请参阅 TO_NUMBER

    如果 exprNUMBER 类型的值,则 VALIDATE_CONVERSION 函数会验证 expr 是否是合法的数值。如果 expr 不是合法的数值,则该函数返回 0。这使您可以识别数据库中的损坏数字值。

  • TIMESTAMP

    如果指定了 TIMESTAMP,则 expr 可以是任何计算结果为 CHARVARCHAR2NCHARNVARCHAR2 数据类型的字符表达式。可选的 fmtnlsparam 参数的作用与 TO_TIMESTAMP 函数相同。如果省略 fmt,则 expr 必须使用 TIMESTAMP 数据类型的默认格式,该格式由 NLS_TIMESTAMP_FORMAT 初始化参数确定。有关更多信息,请参见 TO_TIMESTAMP

  • TIMESTAMP WITH TIME ZONE

    如果指定了 TIMESTAMP WITH TIME ZONE,则 expr 可以是任何计算结果为 CHARVARCHAR2NCHARNVARCHAR2 数据类型的字符表达式。可选的 fmtnlsparam 参数的作用与 TO_TIMESTAMP_TZ 函数相同。如果省略 fmt,则 expr 必须使用 TIMESTAMP WITH TIME ZONE 数据类型的默认格式,该格式由 NLS_TIMESTAMP_TZ_FORMAT 初始化参数确定。有关更多信息,请参见 TO_TIMESTAMP_TZ

  • TIMESTAMP WITH LOCAL TIME ZONE

    如果指定了 TIMESTAMP WITH LOCAL TIME ZONE,则 expr 可以是任何计算结果为 CHARVARCHAR2NCHARNVARCHAR2 数据类型的字符表达式。可选的 fmtnlsparam 参数的作用与 TO_TIMESTAMP 函数相同。如果省略 fmt,则 expr 必须使用 TIMESTAMP 数据类型的默认格式,该格式由 NLS_TIMESTAMP_FORMAT 初始化参数确定。有关更多信息,请参见 TO_TIMESTAMP

返回值

如果 expr 可以成功转换,则 Oracle VALIDATE_CONVERSION() 函数返回 1;否则,此函数返回 0

如果 expr 求值为 null,则此函数返回 1

如果在评估 expr 时出现错误,则此函数返回错误。

Oracle VALIDATE_CONVERSION() 示例

这里有几个展示了 Oracle VALIDATE_CONVERSION() 函数用法的示例。

BINARY_DOUBLE

下面的语句验证给定的值能否转为 BINARY_DOUBLE 数据类型:

SELECT VALIDATE_CONVERSION(1000 AS BINARY_DOUBLE) Result
FROM DUAL;

输出:

   RESULT
_________
        1

BINARY_FLOAT

下面的语句验证给定的值能否转为 BINARY_FLOAT 数据类型:

SELECT VALIDATE_CONVERSION('1234.56' AS BINARY_FLOAT) Result
FROM DUAL;

输出:

   RESULT
_________
        1

DATE

下面的语句验证给定的值能否转为 DATE 数据类型:

SELECT VALIDATE_CONVERSION(
    'July 20, 1969, 20:18' AS DATE,
    'Month dd, YYYY, HH24:MI',
    'NLS_DATE_LANGUAGE = American'
  ) Result
FROM DUAL;

输出:

   RESULT
_________
        1

INTERVAL DAY TO SECOND

下面的语句验证给定的值能否转为 INTERVAL DAY TO SECOND 数据类型:

SELECT VALIDATE_CONVERSION('200 00:00:00' AS INTERVAL DAY TO SECOND) Result
FROM DUAL;

输出:

   RESULT
_________
        1

INTERVAL YEAR TO MONTH

下面的语句验证给定的值能否转为 INTERVAL YEAR TO MONTH 数据类型:

SELECT VALIDATE_CONVERSION('P1Y2M' AS INTERVAL YEAR TO MONTH) Result
FROM DUAL;

输出:

   RESULT
_________
        1

NUMBER

下面的语句验证给定的值能否转为 NUMBER 数据类型:

SELECT VALIDATE_CONVERSION(
    '$100,00' AS NUMBER,
    '$999D99',
    'NLS_NUMERIC_CHARACTERS = '',.'''
  ) Result
FROM DUAL;

输出:

   RESULT
_________
        1

TIMESTAMP

下面的语句验证给定的值能否转为 TIMESTAMP 数据类型:

SELECT VALIDATE_CONVERSION(
    '29-Jan-02 17:24:00' AS TIMESTAMP,
    'DD-MON-YY HH24:MI:SS',
    'NLS_DATE_LANGUAGE = American'
  ) Result
FROM DUAL;

输出:

   RESULT
_________
        1

TIMESTAMP WITH TIME ZONE

下面的语句验证给定的值能否转为 TIMESTAMP WITH TIME ZONE 数据类型:

SELECT VALIDATE_CONVERSION(
    '1999-12-01 11:00:00 -8:00' AS TIMESTAMP WITH TIME ZONE,
    'YYYY-MM-DD HH:MI:SS TZH:TZM'
  ) Result
FROM DUAL;

输出:

   RESULT
_________
        1

TIMESTAMP WITH LOCAL TIME ZONE

下面的语句验证给定的值能否转为 TIMESTAMP WITH LOCAL TIME ZONE 数据类型:

SELECT VALIDATE_CONVERSION(
    '11-May-16 17:30:00' AS TIMESTAMP WITH LOCAL TIME ZONE,
    'DD-MON-YY HH24:MI:SS'
  ) Result
FROM DUAL;

输出:

   RESULT
_________
        0

NULL 参数

如果给定的表达式为 NULL, 无论给定什么类型,VALIDATE_CONVERSION() 总是返回 1

SELECT
    VALIDATE_CONVERSION(NULL AS NUMBER)
FROM dual;

输出:

   VALIDATE_CONVERSION(NULLASNUMBER)
____________________________________
                                   1

再来一个使用其他类型的例子:

SELECT
    VALIDATE_CONVERSION(NULL AS DATE)
FROM dual;

输出:

   VALIDATE_CONVERSION(NULLASDATE)
__________________________________
                                 1

在本示例中,我们使用 SET NULL 'NULL'; 语句将 NULL 值显示为 'NULL' 字符串。

结论

Oracle VALIDATE_CONVERSION() 是一个内置函数,它用于确定是否可以将给定的表达式转换为给定的数据类型。