不能在oracle sql中将时间戳转换为字符或日期



我需要将时间戳值(19-01-21 09:15:00.000000 PM)转换为日期格式('YYYY/MM/DD HH24:MI:SS')。我试图使用to_char函数(将其转换为varchar并在TO_DATE函数中使用它)。我在to_char函数中得到了低于错误的值。这是可行的方法吗?如果有更好的方法,请提出建议

select TO_CHAR('19-01-21 09:15:00.000000 PM','DD-MM-YY HH:MI:SSxFF AM') from dual; 
select TO_DATE(TO_CHAR('19-01-21 09:15:00.000000 PM','DD-MM-YYYY HH:MI:SSxFF AM'),'YYYY/MM/DD HH24:MI:SS'  ) from dual;

我得到以下错误:

ORA-01722: invalid number
01722. 00000 -  "invalid number"
*Cause:    The specified number was invalid.
*Action:   Specify a valid number.

'19-01-21 09:15:00.000000 PM'是字符串字面值;非DATETIMESTAMP数据类型

由于字符串具有小数秒,您可以使用TO_TIMESTAMP将其转换为TIMESTAMP数据类型:

SELECT TO_TIMESTAMP( '19-01-21 09:15:00.000000 PM', 'DD-MM-RR HH12:MI:SS.FF6 AM' )
AS timestamp_value
FROM   DUAL;

输出:

| TIMESTAMP_VALUE ||:---------------------------- || 2021-01-19 21:15:00.000000000 |

如果您希望该值为DATE数据类型,那么您可以将之前的输出和CAST转换为DATE:

SELECT CAST(
TO_TIMESTAMP( '19-01-21 09:15:00.000000 PM', 'DD-MM-RR HH12:MI:SS.FF6 AM' )
AS DATE
) AS date_value
FROM   DUAL;

或者,如果小数秒总是为零:

SELECT TO_DATE( '19-01-21 09:15:00.000000 PM', 'DD-MM-RR HH12:MI:SS".000000" AM' )
AS date_value
FROM   DUAL;

同时输出:

| DATE_VALUE ||:------------------ || 2021-01-19 21:15:00 |

db<此处小提琴>


我需要将时间戳值转换为date/varchar值。

如果您想将值设置为YYYY/MM/DD HH24:MI:SS,那么您可以使用TO_TIMESTAMP,然后使用TO_CHAR:

SELECT TO_CHAR(
TO_TIMESTAMP( '19-01-21 09:15:00.000000 PM', 'DD-MM-RR HH12:MI:SS.FF6 AM' ),
'YYYY/MM/DD HH24:MI:SS'
) AS date_string
FROM   DUAL;

输出:

| DATE_STRING ||:------------------ || 2011/01/19 21:15:00 |

(注意:这输出一个字符串数据类型,而不是DATE数据类型;如果你想要一个DATE数据类型,那么使用第二个或第三个例子。

db<此处小提琴>

最新更新