SQL中的月和年(非日期)左连接
我正在尝试使用下面的代码,在SQL中连接两个数据集的ID和一个日期字段SQL中的月和年(非日期)左连接,sql,date,join,Sql,Date,Join,我正在尝试使用下面的代码,在SQL中连接两个数据集的ID和一个日期字段 CREATE TABLE new_data SELECT A.*, B.`number`, B.`level` FROM data1 AS A LEFT JOIN data2 AS B ON A.ID=B.ID AND A.date=B.join_date 然而,他们应该加入的日期并不完全相同,所以我希望加入的日期只是月份和年份,而不是日期。日期的格式为0000-00-00。但是你是瓦查尔 谢谢从语法上看,我猜您使用的
CREATE TABLE new_data
SELECT A.*, B.`number`, B.`level`
FROM data1 AS A
LEFT JOIN data2 AS B
ON A.ID=B.ID
AND A.date=B.join_date
然而,他们应该加入的日期并不完全相同,所以我希望加入的日期只是月份和年份,而不是日期。日期的格式为0000-00-00。但是你是瓦查尔
谢谢从语法上看,我猜您使用的是MariaDB或MySQL。如果是这种情况,可以在连接谓词中使用
SUBSTRING()
例如,如果需要使用列的前7个字符进行联接,可以执行以下操作:
CREATE TABLE new_data
SELECT A.*, B.`number`, B.`level`
FROM data1 AS A
LEFT JOIN data2 AS B
ON A.ID=B.ID
AND substring(A.date, 1, 7) = substring(B.join_date, 1, 7)
类似于在可以使用子字符串之前回答的“The Impaler”,但是如果您希望将其与任何nvarchar结构一起使用,只更改一个数字而不计算字符串上的字符,则可以使用convert()并指定日期转换的样式/格式
我将在这里放置一个链接,该链接描述convert()sql函数上的所有样式/格式:
因此,您说您的nvarchar结构如下:'0000-00-00',然后您必须使用102样式/格式作为第三个参数,并在convert()sql函数中将数据类型设置为date
例如:
select * from #T01 as T1
left join #T02 as T2 ON T1.ID = T2.ID
WHERE YEAR(CONVERT(DATE,t1.DATE1,102)) = YEAR(CONVERT(DATE,t2.DATE2,102))
AND MONTH(CONVERT(DATE,t1.DATE1,102)) = MONTH(CONVERT(DATE,t2.DATE2,102))
用您正在使用的数据库标记您的问题。此外,样本数据和预期结果也会有所帮助。