如何在SELECT INTO后保留数据类型?

sig*_*gil 2 sql ms-access

我有一个T1包含一些日期/时间字段的表.我在这个表上用UNION查询组合了几个查询,并T2在union上使用SELECT INTO 创建了一个新表,如下所示:

SELECT * INTO T2
FROM (select * from query1_T1
union
select * from query2_T1)
Run Code Online (Sandbox Code Playgroud)

问题是query1_T1为某些日期字段替换空字符串常量,这导致T2具有文本字段而不是日期/时间字段.为了显示:

query1_T1:
select myUDF(someTextField),"" as newDateField from T1

query2_T1:
select anotherUDF(someTextField),oldDateField from T1
Run Code Online (Sandbox Code Playgroud)

哪里oldDateField是日期/时间.

有没有一种方法可以构建SELECT INTO或更改query1_T1,以便我仍然可以从查询中获得相同的结果但newDateField最终会作为日期/时间?

imt*_*tts 5

您始终可以单独创建表,而不是将数据添加到表中.首先,使用适当的数据类型定义所有字段.然后INSERT INTO (columns) SELECT * FROM用来填充它.

更新:

或者你可以做一个混合方法.首先做你SELECT INTO没有行的所有:

SELECT * INTO T2
FROM query2_T1
WHERE 1=0
Run Code Online (Sandbox Code Playgroud)

这将创建您的大多数结构.然后,您可以手动调整任何未正确通过的数据类型.

正确调整结构后,您可以安全地执行此操作:

INSERT INTO T2 
SELECT * FROM query1_T1
UNION 
SELECT * FROM query2_T1
Run Code Online (Sandbox Code Playgroud)