【问题标题】:Converting date to character format in SQL在 SQL 中将日期转换为字符格式
【发布时间】:2014-03-21 18:54:32
【问题描述】:

我正在尝试将存储 m/d/yyyy 的日期格式转换为“yyyymmdd”字符格式,而无需在每次我想在查询中使用该列时强制转换日期列。

目前我正在将日期转换为字符并将其格式化:((cast(cast(invitation_date as CHAR(8)) as date format 'YYYYMMDD'))

有没有办法将数据列转换一次,然后在查询中调用转换后的字符值?

我在 Aqua Data Studio 13.0.3 中使用 Teradata。

【问题讨论】:

  • 源列是 DATE 还是 CHAR?
  • @dnoeth:源列邀请日期存储为十进制(长度为 8)。

标签: sql teradata


【解决方案1】:

如果源是十进制 yyyymmdd 你可以这样做

CAST(invitation_date - 19000000 AS DATE) AS newcol

Teradata 允许在任何地方使用别名,因此您可以简单地这样做

WHERE newcol > DATE

当然最好的情况是在加载期间将这些列更改为 DATE。

【讨论】:

    【解决方案2】:

    导航到文件->选项->结果格式-> Teradata。然后选择数据类型 Date 并输入 yyyyMMdd。您的结果集现在将返回指定的日期格式。让我知道这是否能解决您的问题。

    【讨论】:

    • 这不是我想要实现的,因为它们存储在表格中的日期方式因每个表格而异。有时日期存储为小数,有时存储为日期或字符串。
    【解决方案3】:
    select to_char(field, 'yyyy-mm--dd hh:mm:ss') from table; 
    

    【讨论】:

    • 感谢您的想法,但没有奏效。 select invitationdate(field, 'yyyymmdd') from table; 导致以下错误:“语法错误:数据类型“字段”与定义的类型名称不匹配。”
    【解决方案4】:

    你不应该这样说,它根本行不通:

    select invitationdate(field, 'yyyymmdd')
    

    试试这个:

    SELECT to_char(column_date, 'yyyy/mm/dd') from table;
    

    正如“人”所说。请注意取消划线 (_) 字符;不是这个 (-) 一个。

    【讨论】:

      【解决方案5】:

      这是一种更长但更简单的方法

      选择 你的日期 ,cast((extract(year from yourdate)*100 + extract(month from yourdate))*100 + extract(day from yourdate) as char(8)) as yyyymmdd 来自...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-14
        • 2013-06-22
        • 2015-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-28
        相关资源
        最近更新 更多