如何在sql中将数字转换为日期
Posted
技术标签:
【中文标题】如何在sql中将数字转换为日期【英文标题】:How to convert number to date in sql 【发布时间】:2021-11-21 06:10:00 【问题描述】:我在 python 中使用 sql 从 oracle 获取数据。有些列具有整数值。我想在检索数据时将这些列值转换为日期。
connection = cx_Oracle.connect(user, pwd, dsn, encoding="UTF-8")
cursor = connection.cursor()
results = cursor.execute("SELECT TO_DATE(DATECREATED,'yyyymmdd') as DATECREATED from ARADMIN.EPM_TechnicianInformation").fetchall()
它不工作。
【问题讨论】:
“它不工作”是什么意思?因为,例如select to_date(20210929, 'yyyymmdd') from dual;
返回正确的结果,因为20210929
代表yyyymmdd
格式的有效“日期”。
我想使用实际的表名而不是对偶来将列值直接转换为日期。上面的查询给了我错误 - DatabaseError: ORA-01843: not a valid month
我只是说如果你传递给它的值代表一个有效的日期值,那么查询就可以正常工作。 当然你会使用自己的桌子。由于您得到的错误:并非所有值都有有效日期。当 Oracle 抱怨 invalid month 时,您有类似 20211529 的数字 - 没有月份的数字是 15。当人们将日期存储为字符串或数字时会发生这种情况,因为数据库无法为您进行任何验证。现在您必须先找到那些无效的“日期”并修复它们。
【参考方案1】:
上面的查询给了我错误 - DatabaseError:
ORA-01843: not a valid month
从 Oracle 12 开始,您可以添加一个子句来处理由于无效数据导致的转换过程中的错误:
SELECT TO_DATE(
DATECREATED
DEFAULT NULL ON CONVERSION ERROR,
'yyyymmdd'
) as DATECREATED
FROM ARADMIN.EPM_TechnicianInformation
样本数据:
CREATE TABLE ARADMIN.EPM_TechnicianInformation ( datecreated ) AS
SELECT 20210929 FROM DUAL UNION ALL -- A valid date
SELECT 20211301 FROM DUAL; -- An invalid date as month = 13
输出:
DATECREATED 2021-09-29 00:00:00 <null>
db小提琴here
【讨论】:
以上是关于如何在sql中将数字转换为日期的主要内容,如果未能解决你的问题,请参考以下文章