mysql导入sql文件时 避开_利用SQL脚本导入数据到不同数据库避免重复的3种方法...
前言
相信大家都有所体会,无论何种语言,一旦看见代码中有重复性的代码则想到封装来复用,在SQL同样如此,若我们没有界面来维护而且需要经常进行的操作,我们会写脚本避免下次又得重新写一遍,但是这其中就涉及到一个问题,这个问题我开始也没太在意,直到某时某刻,老大看到我写的脚本后笑着问了一句,你的脚本可否重复执行,我懵逼了,很显然不能,如果不能避免这种情况发生,比如进行插入操作,当下次其他同事来执行其脚本时可能会插入重复数据,如果是在线上那就傻逼了,所以老大又给我上了一课,从此之后每次写脚本都加逻辑判断,是的,也就是可重复执行。
接下来讲讲最近项目中遇到的场景。
话题引入
在国民成年人体质测试中需要计算成年年纪且体侧年龄为20-59岁,若当前日期未超过成年人出生日期则岁数减一,否则不减,例如一个成年人出生日期为1991-11-01,此时该成年人的体侧年龄为25岁,若为1991-10-01则体侧年龄为26岁,此为第一步。第二步则是分组,每个年龄阶段的人测试的项目不一样,即需要根据年龄进行分组,在体侧文档中分为3组,一组为男性20-39岁,一组为女性20-39,最后一组不分男女为40-59。最后我们需要做的是根据不同的年龄阶段和性别进行分组。
我们建立如下表。
由上我们可以看出有20-39岁的男性,也有20-39岁的女性。也有40-59岁的男性等,关键在于我们怎么利用SQL根据国民成年人体质测试文档计算出上述成年人的实际年龄呢。
SELECT Id ,
DATEDIFF(YEAR, Birthday, GETDATE()) AS age ,
Name
FROM dbo.t1
看到上述查询明显不正确,未到出生日期的人年龄并未减掉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中。 这里我能想到的是两种种方式,若还有其他欢迎补充。
LEFT JOIN ....IS NULL
我们利用左连接来进行插入,同时若重复的话则另外需要插入的表主键必定不为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
NOT EXISTS/NOT IN
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)
总结
本节我们讲述了利用写SQL脚本避免重复插入问题,同时来讲述了如何根据出生日期查询实际年龄。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
mysql导入sql文件时 避开_利用SQL脚本导入数据到不同数据库避免重复的3种方法...相关推荐
- mysql把游标数据存入表中_利用Python爬股票数据并存入数据库Mysql
直接上代码,小白也能爬股票......... import tushare as ts import mysql.connector import re,time #创建所有股票的表格以及插入每支股票 ...
- python股票数据库_利用Python爬股票数据并存入数据库Mysql
直接上代码,小白也能爬股票......... import tushare as ts import mysql.connector import re,time #创建所有股票的表格以及插入每支股票 ...
- python处理nc文件并输出_利用python如何处理nc数据详解
前言 这两天帮一个朋友处理了些 nc 数据,本以为很简单的事情,没想到里面涉及到了很多的细节和坑,无论是"知难行易"还是"知易行难"都不能充分的说明问题,还是& ...
- mysql转储导入错误_数据库MYSQL导入SQL文件时错误的解决方法(2种)
从服务器数据库用navicate导出的.sql文件后再用navicate导入到本地的数据库中会出现若干条记录的错误: [Err] 1064 – You have an error in your SQ ...
- mysql 运行sql 编码_关于解决运行 sql 文件时, 找不到 MySQL 默认编码 utf8mb4 的问题...
关于解决运行 sql 文件时, 找不到 MySQL 默认编码 utf8mb4 的问题 本人小白一名, 最近碰到了一个问题, 在 navicat 导入 MySQL 文件时, 报出 MySQL 找不到 u ...
- mysql导入数据库注释乱码_source命令 导入.sql文件时,中文乱码 或者是注释乱码...
1.source命令 导入.sql文件时,中文乱码 或者是注释乱码 首先进入dos命令,进入mysql数据库,之后use 数据库:之后查看你的mysql数据库编码 如下命令:模糊查询变量charact ...
- 关于解决运行sql文件时,找不到MySQL默认编码utf8mb4的问题
关于解决运行sql文件时,找不到MySQL默认编码utf8mb4的问题 参考文章: (1)关于解决运行sql文件时,找不到MySQL默认编码utf8mb4的问题 (2)https://www.cnbl ...
- 关于mysql连接jsp文件时出现Xxx Xxx cannot be resolved to a type的情况
关于mysql连接jsp文件时出现Xxx cannot be resolved to a type的情况 原因有三: a.(可能是jdk版本问题 通常系统使用默认版本 解决办法是进项目配置设置,以及将 ...
- oracle 数据泵impdp导入dmp文件时更改用户及表空间方法
oracle impdp导入dmp文件时更改用户及表空间方法 impdp默认导入expdp的dmp文件时,是需要建立相同名称的表空间及临时表空间的:而且会自动创建相同名称的用户名. 但是有时候我们想更 ...
最新文章
- JS 函数 函数递归
- 于其炒股,不如......
- 200912阶段一C++友元、运算符重载
- libcurl库进行http通讯网络编程
- crm——stark组件核心原理
- linux进程的高级管理,Linux高级程序设计(第2版) PDF扫描版[94MB]
- java安全 ——JAAS(Java 认证和授权服务)开发指南
- SQLIntegrityConstraintViolationException: 异常解决
- 括号配对问题----栈模拟
- javascript语言扩展:可迭代对象(3)
- 运行中的linux备份系统盘,怎样使用ghost对linux进行系统备份?
- matlab2010b显示激活界面_【转】Matlab2010b许可证过期问题,反复提示激活
- 小度杀入《最强大脑》总决赛,除了阴谋论还有什么值得关注的?
- 模重复平方计算法的C实现
- 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
- 新一代至强CPU加速GBase 8a MPP,GBase GCDW云数据仓库助力行业迎接数字化转型新挑战
- PROC PRINT过程
- 互联网、云计算之用户服务
- FPGA学习:Verilog基本语法
- 500左右降噪蓝牙耳机推荐,热门降噪蓝牙耳机排行榜推荐
热门文章
- Outlook 2003中HTML签名格式不正确。当转发或者回复时algin=left失效
- 深度学习多模态融合_多模态深度学习综述.PDF
- Intel ax200 WiFi6吞吐量测试
- excel 自动换行填充 日期
- python统计一句话单词个数_python 统计单词个数
- 防火墙无法打开,错误代码 0×80070422
- python循环同时满足2个条件_python(2)-条件判断、循环等
- 帝国CMS免签支付插件-易支付插件
- 2020C证(安全员)复审模拟考试及C证(安全员)模拟考试软件
- 巫师的总力量和【单调栈+前缀和的前缀和】