【问题标题】:How to convert TEXT data type value to DATE data type value in UPDATE statement in PostgreSQL如何在 PostgreSQL 的 UPDATE 语句中将 TEXT 数据类型值转换为 DATE 数据类型值
【发布时间】:2017-01-01 23:11:48
【问题描述】:

我尝试通过使用 PostgreSQL 将 TEXT 数据类型转换为 DATE 数据类型值来更新 2 列,但出现此错误:

这是我的错误:

ERROR:  syntax error at or near "CAST"
LINE 2: SET   CAST(sle.log_field1 as DATE),
              ^
********** Error **********

ERROR: syntax error at or near "CAST"
SQL state: 42601
Character: 41

这是我的代码:

UPDATE      student_log_entries sle
SET         CAST(sle.log_field1 as DATE),
        CAST(sle.log_field3 as DATE)
WHERE       sle.student_field_id = 400010960;

任何帮助/指导来实现这一点将不胜感激。谢谢。

【问题讨论】:

  • 如果要更改数据类型,需要ALTER表格。
  • 相关语法是:UPDATE tbl SET col = expr; 问题缺少目标列(@Patrick 回答的内容,我现在看到了)

标签: postgresql


【解决方案1】:

假设该列尚未更新,以下查询将通过USING 子句将字段类型更改为date

ALTER TABLE student_log_entries 
   ALTER COLUMN log_field3 TYPE date 
   USING to_date(log_field3, 'YYYY-MM-DD');

如果您需要,您可以在USING 关键字之后使用任何自定义函数来代替 to_date。

如果已经更改了该列,Patrick 的回答会这样做。

【讨论】:

  • 该表已被更改,但是我需要更新从前端应用程序输入错误的记录。有没有办法使用 PostgreSQL 做到这一点?谢谢。
  • @TobySpeight 已编辑。 :)
【解决方案2】:

您需要在UPDATE 语句中包含列名:

UPDATE      student_log_entries sle
SET <name of a column> = CAST(sle.log_field1 as DATE),
    <name of a column> = CAST(sle.log_field3 as DATE)
WHERE       sle.student_field_id = 400010960;

【讨论】:

  • 帕特里克-谢谢。这对我来说很愚蠢。感谢您的回复和帮助。
  • 我们都有暂时失明的时刻。祝你的数据库好运。
猜你喜欢
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 2016-09-27
  • 2014-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多