【问题标题】:Add a date column to a temporary table in SQL将日期列添加到 SQL 中的临时表
【发布时间】:2020-02-16 00:17:57
【问题描述】:

我正在使用 Netezza 中的一个临时表,其中包含 idgenderstart_dateend_date 列。我正在尝试向此表添加一个新列,其中包含所有行的默认日期 2019-01-01。我要添加此列的表是本地临时表,因此 ALTER TABLE 不起作用(“错误:临时表上不允许操作”)。为了解决这个问题,我创建了一个新的临时表,其中包含一个适当命名的空列,但现在我发现我无法使用 UPDATE/SET 来填充我的日期(“错误:列的值太大”)。更改我的临时表以在其中包含包含我的日期的新列的最佳方法是什么?如果可能的话,我想直接修改旧的临时表而不是创建一个新的。注意:我在我正在使用的数据库中没有必要的管理员权限,只能创建一个永久表来 ALTER 代替。

成功创建一个空列的新临时表的代码是:

DROP TABLE new_temp_table IF EXISTS;
GO
SELECT id, gender, start_date, end_date, NULL default_date
INTO TEMP TABLE new_temp_table
FROM old_temp_table;
GO

替换新列中的NULL值不起作用的代码是:

UPDATE new_temp_table
SET default_date = '2019-01-01';
GO

【问题讨论】:

  • 在新建临时表时,您是否尝试过放入日期列值呢? SELECT id, gender, start_date, end_date, '2019-01-01' default_date
  • 这也有效,谢谢!您的回答引出了我在stackoverflow.com/questions/60250981/… 发布的关于 SELECT...INTO 语句的 1000 行限制的相关问题
  • 嗨@KellanBaker 很高兴听到这个消息……不客气!我的建议是为此提出一个新问题。干杯!

标签: sql netezza alter temp


【解决方案1】:

NULL 转换为您想要的类型:

SELECT id, gender, start_date, end_date,
       CAST(NULL as DATE) as default_date
INTO TEMP TABLE new_temp_table
FROM old_temp_table;

Netezza 不知道类型是什么,所以它做出猜测。而且这个猜测不太可能是约会(我认为是int)。

【讨论】:

  • 感谢您回答我的问题。编辑:我随后注意到新表中的行数被 SELECT INTO 语法限制为 1000。我查找了一些解决方法,但它们对于我的数据是不可行的,它有 3600 万行。本地临时表是否有 ALTER TABLE 的替代品(即,一种修改原始临时表而不是创建新临时表的方法,从而避免 SELECT INTO 行限制问题)?
  • @KellanBaker。 . .这是一个单独的问题。
  • 如果愿意,我会将其作为一个单独的问题提出,但这对我来说都是同一个问题 - 提供的答案无法成功解决我正在使用的表格大小的问题.您希望我发一个新帖子还是编辑这个问题以澄清我的表有 3600 万行?
  • @KellanBaker。 . .这回答了您在这里提出的问题。 Stack Overflow 不是一个持续的对话。这是一个问答论坛。
猜你喜欢
  • 2016-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-02
  • 2017-09-23
相关资源
最近更新 更多