SQL: изменение числовой даты на «Дата» - PullRequest
0 голосов
/ 13 июня 2018

Мои переменные даты 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 простонесколько недель, и если мне нужно было провести дальнейшее исследование, прежде чем отправлять этот вопрос.Я чувствую, что делаю какую-то ошибку, например, использую неправильную функцию для неправильной базы данных.Может кто-нибудь помочь мне?

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Я бы просто использовал 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
0 голосов
/ 13 июня 2018

Вы подразумеваете это, я полагаю:

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

Вывод:

datenum
2018-06-02
2018-06-03
0 голосов
/ 13 июня 2018

это зависит от того, что вы используете для запуска этого оператора.Я предполагаю, что простой нестандартный подход - запустить скрипт.как один ниже.

Для преобразования числового значения в символьное значение попробуйте следующий код

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));
...