从 varchar 转换为 datetime 以进行排序

Posted

技术标签:

【中文标题】从 varchar 转换为 datetime 以进行排序【英文标题】:Conversion from varchar to datetime for sorting 【发布时间】:2018-01-04 08:33:48 【问题描述】:

我有 varchar 数据类型的列。其中包含如下格式的日期:

04-JAN-18 11.23.32.195734 AM +05:30

我需要根据最新的时间戳对行进行排序。使用什么功能?

SELECT *
FROM ent_organizations
order by TO_TIMESTAMP(updatedtimestamp,'YYYY-MON-DD HH.MI.SS.FF') desc

ORA-01830: 日期格式图片在转换整个输入之前结束 细绳 01830. 00000 - “日期格式图片在转换整个输入字符串之前结束” *原因: *行动:

【问题讨论】:

为什么要将日期/时间值存储在 varchar 列中? 永远不要将时间戳存储为varchar。您当前的问题就是一个很好的例子,为什么不 【参考方案1】:

将字符串转换为TIMESTAMP,如下所示:

TO_TIMESTAMP_TZ(updatedtimestamp,'DD-MON-YY HH.MI.SS.FF AM TZH:TZM', 'NLS_DATE_LANGUAGE = american') 

如果您使用它进行排序,那么它将基于 UTC 时间,而不是本地时间值。

【讨论】:

感谢它的工作。在 oracle 列中存储日期/日期时间值的最佳做法是什么。 你说这个问题是认真的吗???检查DATETIMESTAMP ... 数据类型:docs.oracle.com/database/121/SQLRF/…

以上是关于从 varchar 转换为 datetime 以进行排序的主要内容,如果未能解决你的问题,请参考以下文章

将 VARCHAR 转换为 Datetime 并将 VARCHAR 转换为 Decimal 时创建外部表错误

从 Excel 导入 SQL Server:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围

从varchar数据类型到datetime数据类型的转换产生一个超出该范围的值

如何将 varchar 日期转换为 datetime2 日期

如何将 DateTime 转换为 VarChar

完全按原样将 Datetime 转换为 Varchar