SQL:将数字日期更改为“日期”;日期“;

SQL:将数字日期更改为“日期”;日期“;,sql,date,type-conversion,numeric,vertica,Sql,Date,Type Conversion,Numeric,Vertica,我的日期变量是数字(37),格式为(2016040420160405,…)。在其他问题之后,我尝试了以下方法 select convert(datetime, date_var) 错误为列日期时间不存在 select convert(date, date_var) 与上述错误相同。 也试过, select convert(date, convert(float, date_var)) 同样的错误 select cast(convert(VARCHAR, date_var) as dat

我的日期变量是
数字(37)
,格式为
(2016040420160405,…)
。在其他问题之后,我尝试了以下方法

select convert(datetime, date_var) 
错误为
列日期时间不存在

select convert(date, date_var) 
与上述错误相同。 也试过,

select convert(date, convert(float, date_var))
同样的错误

select cast(convert(VARCHAR, date_var) as datetime)
给出了类似的错误列
“VARCHAR”不存在


很抱歉,我对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));

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

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

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()

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

select convert(date_var as varchar(255)) 
cast()
是用于在不同类型之间转换的ANSI标准函数

在Vertica,您还可以执行以下操作:

select date_var::varchar(255)
这是从Postgres继承的语法

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

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

我只想使用
cast()

我不确定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

我想你是说:

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

datenum
2018-06-02
2018-06-03

标记您正在使用的DBMS(例如,
MySQL
SQL Server
,等等)。分两步操作,首先是数字到字符,然后是字符到日期。@jarlh我也尝试过同样的错误。我尝试了
选择到日期(到字符(日期变量),'yyyyymmdd')
,它成功了。@FightMilk看起来您正在使用Oracle数据库,您尝试的语句是专门针对Microsoft SQL Server的。虽然使用SQL的所有数据库之间都有很多SQL语言是标准的,但也存在一些差异。SQL/Oracle之间的日期转换在这方面是一个臭名昭著的差异。标记您正在使用的DBMS(即
MySQL
SQL Server
,等等)。分两步进行,首先是数字到字符,然后是字符到日期。@jarlh我尝试过,但出现了相同的错误。我尝试
选择到日期(到字符(日期变量),'yyyyymmdd'))
,它成功了。@Fightmail看起来像是在使用Oracle数据库,您尝试的语句是专门针对Microsoft SQL Server的。虽然使用SQL的所有数据库之间都有很多SQL语言是标准的,但也存在一些差异。SQL/Oracle之间的日期转换在这方面是一个臭名昭著的差异。本质上,这应该类似于
选择cast(将(VARCHAR,date\u var)转换为datetime)
?我尝试了你的答案,它运行时没有错误,但对所有行都给出了
NULL
。@FightMilk。嗯。这些结构在研究生中起作用。我希望,如果Vertica接受这种语法,那么它也能工作。本质上,这应该类似于
select cast(convert(VARCHAR,date\u var)as datetime)
?我尝试了你的答案,它运行时没有错误,但对所有行都给出了
NULL
。@FightMilk。嗯。这些结构在研究生中起作用。我希望,如果Vertica接受这种语法,那么它也能工作。