Как я могу вставить определенные форматы даты в таблицу? - PullRequest
0 голосов
/ 02 июля 2018

У меня есть несколько строк varchar (8) в таблице, которые выглядят следующим образом. 20180630 20180331 20180630

Если я выберу все, вот так, они выглядят хорошо.

Select Left(StartDate,4)+'-' + Substring(StartDate,5,2)+ '-'+Right(StartDate,2),
            Left(Expiry_Date,4)+'-' + Substring(Expiry_Date,5,2)+ '-'+Right(Expiry_Date,2)
From MyTable

Проблема в том, что я пытаюсь вставить записи из одной таблицы в другую, вот так.

Insert Into TBL_TRANS_FINAL(CURRENCY,
                AMOUNT,
                Left(StartDate,4)+'-' + Substring(StartDate,5,2)+ '-'+Right(StartDate,2) as StartDate,
                EFFECTIVESTARTDATE,
                Left(Expiry_Date,4)+'-' + Substring(Expiry_Date,5,2)+ '-'+Right(Expiry_Date,2) as Expiry_Date)
    ...
select *
from TMP3 where IS_SPECIAL_DATE <> 'N' and  AsofDate <> ''  ;

Я получаю сообщение об ошибке: Incorrect syntax near the keyword 'Left'.

Это должно быть довольно просто, я думаю. Что мне здесь не хватает?

Ответы [ 3 ]

0 голосов
/ 02 июля 2018

Форма оператора INSERT , который вы пытаетесь использовать здесь:

INSERT [INTO] table_or_view_name ( column_list ) derived_table;

Ваши вызовы функции LEFT находятся в пределах части column_list оператора, поэтому вы получаете синтаксическую ошибку: column_list должен быть не более чем списком имен столбцов в table_or_view_name, содержимое которого будет заполнено выводом части derived_table оператора (т. е. вашего SELECT). Недопустимо, чтобы манипулирование строками происходило в column_list. Выражения такого рода должны быть в вашем SELECT.

0 голосов
/ 02 июля 2018

Ошибка из-за неправильного синтаксиса в вашем запросе. Правильный синтаксис: INSERT INTO table(col_names) SELECT value1, value2, func(value3)... FROM table

Кроме того, если тип столбца назначения DATE, вы можете использовать функцию SQL Convert с соответствующим стилем для преобразования источника VARCHAR в цель DATE. Вы можете отослать эту ссылку для большего количества стилей.

Insert Into TBL_TRANS_FINAL
Select CURRENCY,
        AMOUNT, 
        convert(date, StartDate,112),       
        EFFECTIVESTARTDATE,
        convert(date, Expiry_Date,112)
0 голосов
/ 02 июля 2018

Вам необходимо использовать синтаксис INSERT INTO tab(col_names) SELECT ... FROM ...:

Insert Into TBL_TRANS_FINAL(
    col_name1,
    --...
    col_name5
)
select 
   CURRENCY,
   AMOUNT,
   CAST(StartDate AS DATE),
   EFFECTIVESTARTDATE,
   CAST(Expiry_Date AS DATE)
from TMP3 
where IS_SPECIAL_DATE <> 'N' and  AsofDate <> '';

Я бы также сохранил дату как тип DATE.

'YYYYMMDD' date literal:
Left(StartDate,4)+'-' + Substring(StartDate,5,2)+ '-'+Right(StartDate,2)
<=>
CAST(StartDate AS DATE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...