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接受这种语法,那么它也能工作。