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
_________
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()
是一个内置函数,它用于确定是否可以将给定的表达式转换为给定的数据类型。