SQL Netezza:使用不同日期格式的内部联接
SQL Netezza: Inner Joins with Different Date Formats
我正在使用 Netezza SQL。
我有以下两个表格:
- table_1 和 table_2
- table_1 有一个日期变量“Date_1”,它的变量类型是“character_varrying(255)”
- table_2 有两个日期变量“Date_2”和“Date_3”,变量类型为“DATE”
- 所有 3 个日期都具有相同的形式:2010-12-31
我正在尝试 运行 以下 SQL 命令:
CREATE TABLE final_table AS SELECT * FROM table_1 a
INNER JOIN table_2 b
ON (( a.date_1 BETWEEN b.date_2 AND b.date_3) AND a.id = b.id)
OR (a.id1 = b.id1)
问题:但这给了我以下错误:
HY000 Error: Bad External Date Representation
到目前为止我尝试了什么: 我正在尝试弄清楚如何使所有 DATE 变量兼容,以便 INNER JOIN 起作用。我认为也许这可以使用 ALTER TABLE 命令来完成:
#create new date variable
ALTER TABLE table_1
ADD COLUMN new_date DATE;
#set new date variable
UPDATE table_1;
set new_date = date_1;
#repeat inner join with new date variable
CREATE TABLE final_table AS SELECT * FROM table_1 a
INNER JOIN table_2 b
ON (( a.new_date BETWEEN b.date_2 AND b.date_3) AND a.id = b.id)
OR (a.id1 = b.id1)
但同样的错误仍然存在。
有人可以告诉我如何解决这个问题吗?
此问题特定于您的 (varchar) table 中的数据。数据库正试图“隐式”从 VARCHAR 转换为 DATE。您应该尝试找出“错误”的值
对于这个特定问题的“快速修复”,您可以尝试显式转换另一种方式:从 DATE 到 VARCHAR:
CREATE TABLE final_table AS SELECT * FROM table_1 a
内连接 table_2 b
ON (( a.date_1 BETWEEN VARCHAR(b.date_2,'YYYY-MM-DD') AND VARCHAR(b.date_3,'YYYY-MM-DD')) AND a.id = b.id)
或者 (a.id1 = b.id1)
我正在使用 Netezza SQL。
我有以下两个表格:
- table_1 和 table_2
- table_1 有一个日期变量“Date_1”,它的变量类型是“character_varrying(255)”
- table_2 有两个日期变量“Date_2”和“Date_3”,变量类型为“DATE”
- 所有 3 个日期都具有相同的形式:2010-12-31
我正在尝试 运行 以下 SQL 命令:
CREATE TABLE final_table AS SELECT * FROM table_1 a
INNER JOIN table_2 b
ON (( a.date_1 BETWEEN b.date_2 AND b.date_3) AND a.id = b.id)
OR (a.id1 = b.id1)
问题:但这给了我以下错误:
HY000 Error: Bad External Date Representation
到目前为止我尝试了什么: 我正在尝试弄清楚如何使所有 DATE 变量兼容,以便 INNER JOIN 起作用。我认为也许这可以使用 ALTER TABLE 命令来完成:
#create new date variable
ALTER TABLE table_1
ADD COLUMN new_date DATE;
#set new date variable
UPDATE table_1;
set new_date = date_1;
#repeat inner join with new date variable
CREATE TABLE final_table AS SELECT * FROM table_1 a
INNER JOIN table_2 b
ON (( a.new_date BETWEEN b.date_2 AND b.date_3) AND a.id = b.id)
OR (a.id1 = b.id1)
但同样的错误仍然存在。
有人可以告诉我如何解决这个问题吗?
此问题特定于您的 (varchar) table 中的数据。数据库正试图“隐式”从 VARCHAR 转换为 DATE。您应该尝试找出“错误”的值
对于这个特定问题的“快速修复”,您可以尝试显式转换另一种方式:从 DATE 到 VARCHAR:
CREATE TABLE final_table AS SELECT * FROM table_1 a 内连接 table_2 b ON (( a.date_1 BETWEEN VARCHAR(b.date_2,'YYYY-MM-DD') AND VARCHAR(b.date_3,'YYYY-MM-DD')) AND a.id = b.id) 或者 (a.id1 = b.id1)