use*_*er1 0 oracle timestamp date virtual-column
我在 Oracle 中遇到虚拟列问题(我需要从日期列开始的时间戳);这是我的例子:
CREATE TABLE TBDATETIME(
DATETIME_1 DATE,
DATETIME_2 TIMESTAMP(9) GENERATED ALWAYS AS (
CAST( TO_CHAR(DATETIME_1, 'DD/MM/YYYY HH24:MI:SS')
|| '.' || TO_CHAR(DATETIME_1, 'FF9') AS TIMESTAMP(9))
) VIRTUAL
);
INSERT INTO TBDATETIME(DATETIME_1)
VALUES(SYSDATE);
COMMIT;
SELECT *
FROM TBDATETIME;
ORA-01821: date format not recognized
01821. 00000 - "date format not recognized"
*Cause:
*Action:
Run Code Online (Sandbox Code Playgroud)
获取数据的问题出在哪里?我尝试了很多格式掩码,但没有任何帮助......
DATETIME_1 DATE
TO_CHAR(DATETIME_1, 'FF9')
Run Code Online (Sandbox Code Playgroud)
这就是问题所在 - DATE 没有小数秒
将 char 转换为时间戳是危险的(结果取决于 nls 设置)
我想你想要这个:
CREATE TABLE TBDATETIME(DATETIME_1 DATE, DATETIME_2 TIMESTAMP(9) GENERATED ALWAYS AS (CAST(DATETIME_1 AS TIMESTAMP(9))) VIRTUAL);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2799 次 |
| 最近记录: |