【问题标题】:SQL: Changing numeric date to "Date"SQL:将数字日期更改为“日期”
【发布时间】:2018-11-23 03:36:25
【问题描述】:

我的日期变量是Numeric(37),格式为(20160404,20160405,...)。在其他问题之后,我尝试了以下方法,

select convert(datetime, date_var) 

出现错误Column datetime does not exist

select convert(date, date_var) 

与上述相同的错误。 也试过了,

select convert(date, convert(float, date_var))

同样的错误。

select cast(convert(VARCHAR, date_var) as datetime)

给出类似的错误列"VARCHAR" does not exist

抱歉,我对 SQL 的了解才几周,如果我需要在发布这个问题之前做进一步的研究。我觉得我犯了一些错误,例如对错误的数据库使用错误的函数。谁能帮帮我?

【问题讨论】:

  • 标记您正在使用的 DBMS(即MySQLSQL Server 等)。
  • 分两步完成,首先将数字转为字符,然后将字符转为日期。
  • @jarlh 我已经尝试过同样的错误。
  • 我试过select to_date(to_char(date_var), 'yyyymmdd'),它成功了。
  • @FightMilk 看起来您使用的是 Oracle 数据库,并且您尝试的语句专门针对 Microsoft SQL Server。尽管许多 SQL 语言在使用它的所有数据库之间都是标准的,但还是存在一些差异。 SQL/Oracle 之间的日期转换在这方面是一个臭名昭著的差异。

标签: sql date type-conversion numeric vertica


【解决方案1】:

这取决于您使用什么来运行此语句。 我想一个简单的开箱即用的方法是运行一个脚本。像下面的那个。

为了将数值转换为字符值,请尝试以下代码

PROC SQL;

  CREATE TABLE y AS

  SELECT PUT(x.subjid, 6.) AS subjid,

         PUT(x.date, YYMMDD10. ) AS date

  FROM x;

QUIT;

或者如果你只需要做一个选择语句..

SELECT CONVERT(DATETIME,CONVERT(VARCHAR(8),NumberDate),112)

或者如果你需要声明一个新的数字并设置 x 的日期格式

SELECT CONVERT(DATETIME, CONVERT(CHAR(8), @x));

【讨论】:

    【解决方案2】:

    我只会使用cast():

    select convert(date_var as datetime) 
    

    我不确定 Vertica 是否支持特定转换,但这应该可以:

    select convert(date_var as varchar(255)) 
    

    cast() 是 ANSI 标准函数,用于在不同类型之间进行转换。

    在 Vertica 中,您还可以:

    select date_var::varchar(255)
    

    这是继承自 Postgres 的语法。

    对于您的实际问题,如果您必须转换两次,我不会感到惊讶:

    select (date_var::varchar(255))::datetime
    

    【讨论】:

    • 本质上应该类似于select cast(convert(VARCHAR, date_var) as datetime)?我试过你的答案,它运行没有错误,但为所有行提供NULL
    • @FightMilk 。 . .嗯。这些构造在 Postgres 中工作。我希望如果 Vertica 接受该语法,那么它也可以正常工作。
    【解决方案3】:

    你的意思是,我想:

    WITH
    input(datenum) AS (
              SELECT 20180602
    UNION ALL SELECT 20180603
    )   
    SELECT datenum::VARCHAR(16)::DATE FROM input;
    

    输出是:

    datenum
    2018-06-02
    2018-06-03
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 2021-10-16
      相关资源
      最近更新 更多