Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中的月和年(非日期)左连接_Sql_Date_Join - Fatal编程技术网

SQL中的月和年(非日期)左连接

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。但是你是瓦查尔 谢谢从语法上看,我猜您使用的

我正在尝试使用下面的代码,在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。但是你是瓦查尔


谢谢

从语法上看,我猜您使用的是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))

用您正在使用的数据库标记您的问题。此外,样本数据和预期结果也会有所帮助。