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可以是任何求值为CHAR、VARCHAR2、NCHAR或NVARCHAR2数据类型的字符字符串,或者类型为NUMBER、BINARY_FLOAT或BINARY_DOUBLE的数字值。可选的fmt和nlsparam参数与TO_BINARY_DOUBLE函数具有相同的作用。有关更多信息,请参见 TO_BINARY_DOUBLE。 - 
BINARY_FLOAT如果指定了
BINARY_FLOAT,则expr可以是任何求值为CHAR、VARCHAR2、NCHAR或NVARCHAR2数据类型的字符字符串,或者类型为NUMBER、BINARY_FLOAT或BINARY_DOUBLE的数字值。可选的fmt和nlsparam参数与TO_BINARY_FLOAT函数具有相同的作用。有关更多信息,请参见 TO_BINARY_FLOAT。 - 
DATE如果指定了
DATE,则expr可以是任何求值为CHAR、VARCHAR2、NCHAR或NVARCHAR2数据类型的字符字符串。可选的fmt和nlsparam参数与TO_DATE函数具有相同的作用。有关更多信息,请参见 TO_DATE。 - 
INTERVAL DAY TO SECOND如果指定了
INTERVAL DAY TO SECOND,则expr可以是任何计算为CHAR、VARCHAR2、NCHAR或NVARCHAR2数据类型的字符字符串表达式,并且必须包含 SQL 间隔格式或 ISO 时长格式中的值。对于此数据类型,可选的fmt和nlsparam参数不适用。有关 SQL 间隔格式和 ISO 时长格式的详细信息,请参阅 TO_DSINTERVAL。 - 
INTERVAL YEAR TO MONTH如果指定了
INTERVAL YEAR TO MONTH,则expr可以是任何计算为CHAR、VARCHAR2、NCHAR或NVARCHAR2数据类型的字符字符串表达式,并且必须包含 SQL 间隔格式或 ISO 时长格式中的值。对于此数据类型,可选的fmt和nlsparam参数不适用。有关 SQL 间隔格式和 ISO 时长格式的详细信息,请参阅 TO_YMINTERVAL。 - 
NUMBER如果指定了
NUMBER,则expr可以是任何计算为CHAR、VARCHAR2、NCHAR或NVARCHAR2数据类型的字符字符串表达式,或者是NUMBER、BINARY_FLOAT或BINARY_DOUBLE类型的数值。可选的fmt和nlsparam参数的作用与TO_NUMBER函数相同。有关详细信息,请参阅 TO_NUMBER。如果
expr是NUMBER类型的值,则VALIDATE_CONVERSION函数会验证expr是否是合法的数值。如果expr不是合法的数值,则该函数返回 0。这使您可以识别数据库中的损坏数字值。 - 
TIMESTAMP如果指定了
TIMESTAMP,则expr可以是任何计算结果为CHAR、VARCHAR2、NCHAR或NVARCHAR2数据类型的字符表达式。可选的fmt和nlsparam参数的作用与TO_TIMESTAMP函数相同。如果省略fmt,则expr必须使用TIMESTAMP数据类型的默认格式,该格式由NLS_TIMESTAMP_FORMAT初始化参数确定。有关更多信息,请参见 TO_TIMESTAMP。 - 
TIMESTAMP WITH TIME ZONE如果指定了
TIMESTAMP WITH TIME ZONE,则expr可以是任何计算结果为CHAR、VARCHAR2、NCHAR或NVARCHAR2数据类型的字符表达式。可选的fmt和nlsparam参数的作用与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可以是任何计算结果为CHAR、VARCHAR2、NCHAR或NVARCHAR2数据类型的字符表达式。可选的fmt和nlsparam参数的作用与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
_________
        1BINARY_FLOAT
下面的语句验证给定的值能否转为 BINARY_FLOAT 数据类型:
SELECT VALIDATE_CONVERSION('1234.56' AS BINARY_FLOAT) Result
FROM DUAL;
输出:
   RESULT
_________
        1DATE
下面的语句验证给定的值能否转为 DATE 数据类型:
SELECT VALIDATE_CONVERSION(
    'July 20, 1969, 20:18' AS DATE,
    'Month dd, YYYY, HH24:MI',
    'NLS_DATE_LANGUAGE = American'
  ) Result
FROM DUAL;
输出:
   RESULT
_________
        1INTERVAL DAY TO SECOND
下面的语句验证给定的值能否转为 INTERVAL DAY TO SECOND 数据类型:
SELECT VALIDATE_CONVERSION('200 00:00:00' AS INTERVAL DAY TO SECOND) Result
FROM DUAL;
输出:
   RESULT
_________
        1INTERVAL YEAR TO MONTH
下面的语句验证给定的值能否转为 INTERVAL YEAR TO MONTH 数据类型:
SELECT VALIDATE_CONVERSION('P1Y2M' AS INTERVAL YEAR TO MONTH) Result
FROM DUAL;
输出:
   RESULT
_________
        1NUMBER
下面的语句验证给定的值能否转为 NUMBER 数据类型:
SELECT VALIDATE_CONVERSION(
    '$100,00' AS NUMBER,
    '$999D99',
    'NLS_NUMERIC_CHARACTERS = '',.'''
  ) Result
FROM DUAL;
输出:
   RESULT
_________
        1TIMESTAMP
下面的语句验证给定的值能否转为 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
_________
        1TIMESTAMP 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
_________
        1TIMESTAMP 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
_________
        0NULL 参数
如果给定的表达式为 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() 是一个内置函数,它用于确定是否可以将给定的表达式转换为给定的数据类型。