SQL:将数字日期更改为 "Date"

SQL: Changing numeric date to "Date"

我的日期变量是 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)

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

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

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

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

PROC SQL;

  CREATE TABLE y AS

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

         PUT(x.date, YYMMDD10. ) AS date

  FROM x;

QUIT;

或者如果您只需要执行 select 语句..

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

或者如果您需要声明一个新的数字并设置 x

的日期格式
SELECT CONVERT(DATETIME, CONVERT(CHAR(8), @x));

我会用 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

我想你是这个意思:

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

输出为:

datenum
2018-06-02
2018-06-03