我有一个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最终会作为日期/时间?
您始终可以单独创建表,而不是将数据添加到表中.首先,使用适当的数据类型定义所有字段.然后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)