我在表中有一些类似这样的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'.
我认为这应该非常简单。我在这里想念什么?
答案 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)