Sql 无法将日期格式化为特定格式

Sql 无法将日期格式化为特定格式,sql,postgresql,Sql,Postgresql,我已将csv文件中的数据导入postgresql数据库,数据库列中存储的日期采用此格式'2012-27-3T19:00:18'当我尝试对csv文件应用格式时,它不起作用,因此它位于数据库中的Varchar数据类型中。我试图将列的数据类型更改为timestamp和date,并在这两个时间段返回此错误 SQL Error [22008]: ERROR: date/time field value out of range: "2012-27-3T19:00:18" Hint: Perhaps y

我已将csv文件中的数据导入postgresql数据库,数据库列中存储的日期采用此格式
'2012-27-3T19:00:18'
当我尝试对csv文件应用格式时,它不起作用,因此它位于数据库中的
Varchar
数据类型中。我试图将列的数据类型更改为timestamp和date,并在这两个时间段返回此错误

SQL Error [22008]: ERROR: date/time field value out of range: "2012-27-3T19:00:18"
  Hint: Perhaps you need a different "datestyle" setting.
当我试图在Select语句中应用格式时,它给了我相同的错误。有没有办法将日期的格式更改为
'YYYY/MM/DD HH:MM:SS.SSS'

这就是我想要达到的目标

select 
TO_CHAR(column12 :: DATE, 'YYYY/MM/DD HH24:MM:SS.00') column12 
from newtable n
当我在今天的日期和时间上应用相同的格式化技术时,效果很好

select TO_CHAR(NOW() :: DATE, 'YYYY/MM/DD HH24:MM:SS.00');

正如错误显示的那样

Error [22008]: ERROR: date/time field value out of range: "2012-27-3T19:00:18"
超出范围


尝试找到与日期格式匹配的正确列大小(如:20)。

< P>,您的字符串值有一个非常奇怪的格式,因为它有中间的一天而不是末尾,正如人们期望的ISO格式。p> 您需要使用带有适当格式掩码的
to_timestamp()
来转换该格式:

select to_char(to_timestamp('2012-27-3T19:00:18', 'yyyy-dd-mm"T"hh24:mi:ss'), 'YYYY/MM/DD HH24:MM:SS.00') 
from the_table;

但是您确实应该修复表定义,并将列声明为
时间戳

试试这个

SELECT to_char(date_column, 'yyyy-MM-dd HH:mm:ss') FROM table_name

试试这种格式,也许是
yyyy-MM-dd'T'HH:MM:ss

这是一种非常奇怪的格式,在月份的前一天使用
T
,就好像它是一种标准格式一样。这项工作:

select to_timestamp('2012-27-3T19:00:18', 'YYYY-D-M\Thh24:mm:ss')
如果不需要时区,可以将其删除:

select to_timestamp('2012-27-3T19:00:18', 'YYYY-D-M\Thh24:mm:ss')::timestamp without time zone

请回答您的问题并添加用于将列转换为正确数据类型的SQL语句。您还应该研究导入CSV的方式,这样就不需要将列定义为
varchar
即可开始with@a_horse_with_no_name请现在检查,这可能是什么?我是指数据库中列的大小。我正在尝试将数据类型更改为timestamp,但它不起作用。奇怪的是,当我双击excel文件中的列时,它会在日期开始时显示
,一旦我将其删除,它就可以正常工作,并且在导入数据库后,
“仍然不起作用。当我在这里输入值时,您的查询可以正常工作,但当我替换为它给出的列名时我认为这个错误不同于SQL错误[22008]:错误:日期/时间字段值超出范围:“2015-9-24T14:47:58”
@MuhammadAsim:很明显,您有使用
yyyy-mm-dd
的值和使用
yyyy-dd-mm
的值,您无法可靠地转换它们。您必须在源代码处修复此问题,也就是说,您必须修复写出这些奇怪值的代码。