时间:2021-07-01 10:21:17 帮助过:17人阅读
看到上述查询明显不正确,未到出生日期的人年龄并未减掉1,此时我们可以利用DATEPART函数,第一个参数指定为dayofyear,此参数表明指定日期到在这一年的天数,例如我们想要获取当前已经过了多少天。
SELECT DATEPART(dayofyear, GETDATE())
SELECT DATEPART(dayofyear, ‘2017-12-31‘)
我们通过出生日期的天数和当前日期的天数,若大于当前日期天数则说明生日还未到,否则减掉1。
SELECT Id , DATEDIFF(YEAR, Birthday, GETDATE()) - CASE WHEN DATEPART(DAYOFYEAR, Birthday) > DATEPART(DAYOFYEAR, GETDATE()) THEN 1 ELSE 0 END Age , Name FROM dbo.t1
此时我们完成了年龄阶段的区分,下面我们再插入到另外一个数据库它test2中。 这里我能想到的是两种种方式,若还有其他欢迎补充。
我们利用左连接来进行插入,同时若重复的话则另外需要插入的表主键必定不为NULL,所以我们外加NULL判断则可以去除重复插入问题。
INSERT INTO test2.dbo.t2 ( UserId , Birthday , Gender , Name ) SELECT t1.Id , t1.Birthday , t1.Gender , t1.Name FROM dbo.t1 AS t1 LEFT JOIN test2.dbo.t2 AS t2 ON t1.Id = t2.UserId WHERE t2.Id IS NULL
当再次执行时则返回受影响行数为0
INSERT INTO test2.dbo.t2 ( UserId , Birthday , Gender , Name ) SELECT t1.Id , t1.Birthday , t1.Gender , t1.Name FROM dbo.t1 AS t1 WHERE NOT EXISTS(SELECT t2.UserId FROM test2.dbo.t2 t2 WHERE t2.UserId = t1.Id)
INSERT INTO test2.dbo.t2 ( UserId , Birthday , Gender , Name ) SELECT t1.Id , t1.Birthday , t1.Gender , t1.Name FROM dbo.t1 AS t1 WHERE t1.Id NOT in (SELECT t2.UserId FROM test2.dbo.t2 t2 WHERE t2.UserId = t1.Id)
本节我们讲述了利用写SQL脚本避免重复插入问题,同时来讲述了如何根据出生日期查询实际年龄。
通过SQL脚本导入数据到不同数据库避免重复导入三种方式
标签:end 区分 name es2017 left join sts null logs 第一个