如何将特定的日期格式插入表格?

时间:2018-07-02 16:48:14

标签: sql-server sql-server-2008

我在表中有一些类似这样的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 :(得分:2)

您需要使用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)

答案 1 :(得分:1)

您要在此处使用的INSERT statement的形式是:

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中。

答案 2 :(得分:0)

该错误是由于查询语法错误所致。正确的语法是INSERT INTO table(col_names) SELECT value1, value2, func(value3)... FROM table

此外,如果目标列类型为DATE,则可以使用具有适当样式的SQL Convert函数将源VARCHAR转换为目标DATE。您可以参考此link了解更多样式。

Insert Into TBL_TRANS_FINAL
Select CURRENCY,
        AMOUNT, 
        convert(date, StartDate,112),       
        EFFECTIVESTARTDATE,
        convert(date, Expiry_Date,112)