【问题标题】:SQL - Informix - Changing the datatype of a column from numeric to characterSQL - Informix - 将列的数据类型从数字更改为字符
【发布时间】:2010-10-06 17:46:31
【问题描述】:

我有一个临时表,其中一列中有数字整数值。我想根据某些条件将整数值替换为字符值,或者我想添加另一列字符类型,该列会根据某些条件自动将值插入自身。

如果 x 如果 x > 1,则更改为“FA”或创建新列并将“FA”存储在该行中

另外,在我的 Informix 版本中,临时表不允许使用更改命令。

【问题讨论】:

  • 它有助于指定 IDS 的版本 - 或其他 Informix 数据库服务器 - 特别是如果您必须提及“在我的版本中”。
  • 我不必提及,我不认为 - 我如何获得版本?似乎没有人知道,而且我们的手册已经过时了

标签: sql types informix alter


【解决方案1】:
SELECT          enrollsess.id,
                enrollsess.yr,
                "SP" sess
FROM            enrollsess
WHERE           enrollsess.yr_offset <= 1
UNION
SELECT          enrollsess.id,
                enrollsess.yr,
                "FA" sess
FROM            enrollsess
WHERE           enrollsess.yr_offset > 1
INTO            TEMP enrollsess2 WITH NO LOG;

【讨论】:

    【解决方案2】:

    【讨论】:

    • 很酷,它也可以工作......但我必须在结束情况后明确指定“来自”部分 - 不是你的错,我从未提及我试图调节的临时表的名称
    【解决方案3】:

    你是对的,你不能改变临时表。可以使用CASE 语句添加具有此派生值的额外列,即:

    SELECT enroll.ud, enroll.yr, (CASE
       WHEN enrollsess.yr_offset <=1 THEN "FA"
       ELSE "SP" END)::CHAR(2) AS sess, ...
    

    可能不需要强制转换(即括号和::CHAR(2))。

    如果逻辑可以表示为零/非零(在您的示例中不清楚 yr_offset 是否可以为负),那么它就更简单了:

    SELECT enroll.id, enroll.yr,
         DECODE(enrollsess.yr_offset, 0, "FA", "SP")::CHAR(2) AS sess, ...
    

    More details on CASE syntax from the manual

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-28
      • 2018-09-26
      • 2015-08-02
      • 2011-12-02
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多