首页 > 数据库 >数据库 - MySQL转换SQL Server时,替换 FIND_IN_SET 函数引发的问题

数据库 - MySQL转换SQL Server时,替换 FIND_IN_SET 函数引发的问题

时间:2023-09-27 15:13:42浏览次数:52  
标签:SET 匹配 MySQL Server SQL FIND

MySQL转换SQL Server时,替换 FIND_IN_SET 函数引发的问题

 在之前的文章中,我列举出了一个当 MySQL 转换 SQL Server 时,FIND_IN_SET 函数在 SQL Server 中的解决方案:链接

 就是使用

charindex(cast(匹配列 as varchar(50)), 被匹配列(多个用,分开的值)) <![CDATA[ > ]]> 0

替换 MySQL 中的 FIND_IN_SET。

但是!!!这个方案在生产环境中,引发了非常大的问题:比如匹配列是"8",但被匹配列是"58,59",这个判断依然是成立的,也就是说引起了错误的外键关联,这是非常危险且不可接受的。

所以我选取了如下方案去修复:

select *
from table1 t1
         left join (select t2.*,
                           '声明一个新的列' = substring(被匹配列, b.number,
                                                        charindex(',', 被匹配列 + ',', b.number) -
                                                        b.number)
                    from table2 t2
                             inner join master.dbo.spt_values b
                                        on b.number between 1 and len(被匹配列)
                                            and
                                           substring(',' + 被匹配列, b.number, 1) =
                                           ','
                    where b.type = 'P') t3 on t1.匹配列 = t3.新的列

其中 master.dbo.spt_values 是SQL Server 的内置表,具体作用可以在网络上找到,这里就不详细描述了。

虽然这种方式可以从根本上解决FIND_IN_SET函数的迁移问题,但这种针对这种复杂逻辑,如果时间允许的话,还是迁移到后台服务中好一些。

 

标签:SET,匹配,MySQL,Server,SQL,FIND
From: https://www.cnblogs.com/helios-fz/p/17732703.html

相关文章

  • MySQL IFNULL函数
    MySQLIFNULL函数简介MySQLIFNULL函数是MySQL控制流函数之一,它接受两个参数,如果不是NULL,则返回第一个参数。否则,IFNULL函数返回第二个参数。两个参数可以是文字值或表达式。以下说明了IFNULL函数的语法: 1IFNULL(expression_1,expression_2); 如果expression_1不为NULL,则......
  • Kubernetes创建MysQL
    原文:https://www.cnblogs.com/wenkuna/p/16985512.html创建数据存储PV、PVC这里我们使用nfs作为storageclass,具体yaml文件如下:yaml#创建PVapiVersion:v1kind:PersistentVolumemetadata:name:mysqlspec:storageClassName:manualcapacity:storage:20Gi......
  • Dockerfile如何制作mysql镜像
    原文:https://blog.csdn.net/dwd22/article/details/130705146Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。1.编写dockerfile_mysql5.7在文件夹/root/dockerfile/mysql创建文件......
  • MySQL的SQL语句优化
    一、拿到SQL之后,用执行计划查看参数。explainselect1from`d_ec_hyx`.`t_advertiser_info`where1=1andf_corp_id=15930142andf_typein(1,4)andf_refund_status=1limit1 二、执行计划ID。1、id相同,执行顺序从上往下;2、id不同,如果是子查......
  • Solution Set - 图上问题
    CF360ELink&Submission.首先显然可以选择的边的权值一定会取端点值。事实上,第一个人经过的边选最小,第一个人不经过的边选最大,这样一定不劣。进一步,如果\(s_1\)到点\(u\)的距离小于等于\(s_2\),则\((u,v)\)这条边应该取最小值。所以可以初始全部当作最大值,不断选择一条边修......
  • Mysql查询不区分大小写
    当使用mysql查询时,发现不区分大小写。经查,是以下问题utf8_general_ci --不区分大小写utf8_bin--区分大小写  解决方法一:修改排序规则为utf8_bin 解决方法二:在查询的字段前面加个binary ......
  • 数据库的三范式是什么?MySQL数据库引擎有哪些?InnoDB与MyISAM的区别
    一、数据库的三范式第一范式:列不可再分第二范式:主键约束,行可以唯一区分第三范式:外键约束,表的非主属性不能依赖于其它表的非主属性第二范式建立在第一范式上,第三范式建立在第一第二范式上。二、MySQL数据库引擎有哪些可以用如下命令查看mysql提供的所有引擎:mysql>showengines;MySq......
  • mysql 获取当前日期周几
    --方法一:使用WEEKDAY函数SELECTWEEKDAY(CURDATE());--返回0到6,分别代表星期日到星期六--方法二:使用DAYOFWEEK函数SELECTDAYOFWEEK(CURDATE());--返回1到7,分别代表星期日到星期六--方法三:使用DATE_FORMAT函数SELECTDATE_FORMAT(CURDATE(),'%w');......
  • 【Mysql主从复制】1主多从
    这里使用docker进行演示两台mysql主从搭建1:使用Docker启动俩个Mysql容器,配置挂载数据与配置文件传送门:https://www.cnblogs.com/wanghong1994/p/17731143.html创建完后应该就有俩个Mysql(或者你有两个服务器,启动了mysql并且配置完成):[root@VM-12-9-centos/]#dockerp......
  • MySQL进阶篇:第二章_二.二_索引结构
    2.2索引结构2.2.1概述MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的索引结构,主要包含以下几种:索引结构描述B+Tree索引最常见的索引类型,大部分引擎都支持B+树索引Hash索引底层数据结构是用哈希表实现的,只有精确匹配索引列的查询才有效,不支持范......