为什么在字符函数中使用“DATE”数据类型有效?
How come it Is valid to use `DATE` data type in Character functions?
编辑 1:根据用户 hwd 的评论,我实现了据说只接受任何数据类型的函数 CHAR
、VARCHAR2
、NCHAR
、NVARCHAR2
、CLOB
或 NCLOB
仍在接受 DATE
。
假设 concat
, substr
,lower
表示仅接受任何数据类型 CHAR
, VARCHAR2
, NCHAR
, NVARCHAR2
、CLOB
或 NCLOB
。但以下仍然有效。
select concat('xyz',to_date('25-07-17')) from dual;
select substr(sysdate,1,5) from dual;
select lower(sysdate) from dual;
编辑 1 之前:
问题:SYSDATE
是否在 CONCAT
期间隐式转换为 CLOB
数据?
我对文档中的以下陈述感到困惑。
-During concatenation operations, Oracle converts from noncharacter datatypes to CHAR
or NCHAR
..But I feel it some way contradicts Implicit Type Conversion Matrix 因为它显示 DATE
无法转换为 CHAR
、VARCHAR2
、NCHAR
、NVARCHAR2
.
-Most SQL character functions are enabled to accept CLOBs as parameters.
所以我想知道 concat('xyz',sysdate)
如何有效? sysdate 转换成什么数据类型?
what data type is sysdate converted to?
您可以使用 dump() 函数推断数据类型,该函数发出输入的数据类型:
SQL> alter session set nls_date_format='dd-mm-yy';
Session altered.
SQL> select dump(concat('xyz',to_date('25-07-17'))) from dual;
DUMP(CONCAT('XYZ',TO_DATE('25-07-17')))
--------------------------------------------------------------------------------
Typ=1 Len=11: 120,121,122,50,53,45,48,55,45,49,55
由于 concat 正在生成数据类型 1 VARCHAR2,因此必须将日期值强制转换为 VARCHAR2。
link 的 Table 2-10 清楚地表明 DATE 可以强制转换为 CHAR、NCHAR、VARCHAR2 和 NVARCHAR2。矩阵中的 'X' 值表示 X can be implicitly converted to Y
.
转换主要通过会话参数 NLS_DATE_FORMAT 实现。但是您可以使用 show parameter nls
sqlplus 命令列出所有这些命令(它也应该在 sqldeveloper 和 sqlcl 中工作)。
编辑 1:根据用户 hwd 的评论,我实现了据说只接受任何数据类型的函数 CHAR
、VARCHAR2
、NCHAR
、NVARCHAR2
、CLOB
或 NCLOB
仍在接受 DATE
。
假设 concat
, substr
,lower
表示仅接受任何数据类型 CHAR
, VARCHAR2
, NCHAR
, NVARCHAR2
、CLOB
或 NCLOB
。但以下仍然有效。
select concat('xyz',to_date('25-07-17')) from dual;
select substr(sysdate,1,5) from dual;
select lower(sysdate) from dual;
编辑 1 之前:
问题:SYSDATE
是否在 CONCAT
期间隐式转换为 CLOB
数据?
我对文档中的以下陈述感到困惑。
-During concatenation operations, Oracle converts from noncharacter datatypes to CHAR
or NCHAR
..But I feel it some way contradicts Implicit Type Conversion Matrix 因为它显示 DATE
无法转换为 CHAR
、VARCHAR2
、NCHAR
、NVARCHAR2
.
-Most SQL character functions are enabled to accept CLOBs as parameters.
所以我想知道 concat('xyz',sysdate)
如何有效? sysdate 转换成什么数据类型?
what data type is sysdate converted to?
您可以使用 dump() 函数推断数据类型,该函数发出输入的数据类型:
SQL> alter session set nls_date_format='dd-mm-yy';
Session altered.
SQL> select dump(concat('xyz',to_date('25-07-17'))) from dual;
DUMP(CONCAT('XYZ',TO_DATE('25-07-17')))
--------------------------------------------------------------------------------
Typ=1 Len=11: 120,121,122,50,53,45,48,55,45,49,55
由于 concat 正在生成数据类型 1 VARCHAR2,因此必须将日期值强制转换为 VARCHAR2。
link 的 Table 2-10 清楚地表明 DATE 可以强制转换为 CHAR、NCHAR、VARCHAR2 和 NVARCHAR2。矩阵中的 'X' 值表示 X can be implicitly converted to Y
.
转换主要通过会话参数 NLS_DATE_FORMAT 实现。但是您可以使用 show parameter nls
sqlplus 命令列出所有这些命令(它也应该在 sqldeveloper 和 sqlcl 中工作)。