sql 针对多个id或名称的分割和组合
开发中经常遇到把多个id拼接在一起符号隔开传入数据库,那拆分呢就是个大事
SELECT nPushID
INTO #temp
FROM Table1
WHERE CHARINDEX( ',' + CONVERT(VARCHAR(10), nCoulmn) + ',', ',' + '3305,3311,3314' + ',') > 0
SELECT * FROM #temp
这里需要有表,并且是有存在数据与传的字符串相关。列针对的是int 型,所以要转换。
DECLARE
@a decimal(18, 2) = 360, --返券的金额
@b decimal(18, 2) = 5, --券张
@c VARCHAR(50)= '40,30,10,10,10',
@cResult DECIMAL(18,2) = 0,
@cRemainder DECIMAL(18,2) = 0, --余额
@ignore DECIMAL(18,2) = 70, --余额标准,不足标准将余额合并到最后一张分券
@str varchar(8000)
if object_id(N'tempdb..#temp1',N'U') is not null
begin
drop table #temp1
print 'aaa'
end
create table #temp1 (
id int,
dmPrice DECIMAL(18,2)
)
set @str = 'select dmPrice='+replace(@c,',',''+' union all select ')+'' --set @str = 'select dmPrice='''+replace(@c,',',''''+' union all select ''')+'''' --字符串列 set @str='select id=identity(int,1,1),dmPrice into #temp from ('+@str+') a ;
insert into #temp1 select * from #temp;'
exec(@str) --可针对临时表做操作
INSERT INTO Table_a SELECT '','',10,1,dmPrice,GETDATE(),10,10 FROM #temp1 DECLARE
@c VARCHAR(50)= '40,30,10,10,10',
@str VARCHAR(8000)=''
set @str = 'select name='''+replace(@c,',',''''+' union all select ''')+'''' set @str='select id=identity(int,1,1),name into #temp from ('+@str+') a '
exec(@str) --这种只能用作显示,且无法针对临时表做操作
这个就不需要真实的表和数据来做分割。网上有很多循环的例子,但效率不如这个
针对订单那种订单主从表,从表多个的名称拼接在一起的
--实例1 分割符在前
select isnull ((select '@'+ CommodityName from OrderInfo where OrderInfo.orderid =OrderMain.OrderID for xml path('')),'') from OrderMain
where orderid ='' --针对分隔符在前,可以用stuff很方便
select isnull (stuff((select '@'+ CommodityName from OrderInfo where OrderInfo.orderid =OrderMain.OrderID for xml path('')),1,1,''),'') from OrderMain
where orderid ='' --实例2 同表,
select stuff((select ','+CONVERT(VARCHAR(20),A.nID) from Table_a A WHERE A.nId= @nId FOR xml PATH('')), 1, 1, '') as nID
--分隔符在后,对于拼接名称的,个人觉得用substring、left还麻烦点,不如在后台或者前台去处理
--写入临时表的方式分割
DECLARE
@str1 NVARCHAR(max),
@nTempF VARCHAR(MAX)='a;b;c;d;e;f;g' create table #tt(nID int,aa VARCHAR(MAX))
insert into #tt values(3,@nTempF) SELECT a.vcNewID,T.c.value('.', 'sysname') AS vcWxID
into #temp1
FROM (select NEWID() as vcNewID ,CONVERT(XML,'<x>'+REPLACE(aa,';','</x><x>')+'</x>') vcSerialNo from #tt) AS A
CROSS APPLY A.vcSerialNo.nodes('/x/text()') T(c) select * from #temp1
sql 2016 将支持OpenJson
declare @vcLoginIdJson nvarchar(max)
set @vcLoginIdJson = '{"admin":"","hyh":""}'
select [key] as vcLoginId FROM openjson(@vcLoginIdJson)
详细参考地址
https://docs.microsoft.com/zh-cn/sql/relational-databases/json/convert-json-data-to-rows-and-columns-with-openjson-sql-server
sql 针对多个id或名称的分割和组合的更多相关文章
- sql 查询表中所有字段的名称
最近工作用到SQL语句查询表中所有字段的名称,网上查询,发现不同数据库的查询方法不同,例如: SQL server 查询表的所有字段名称:Select name from syscolumns Whe ...
- SQL-29 使用join查询方式找出没有分类的电影id以及名称
题目描述 film表 字段 说明 film_id 电影id title 电影名称 description 电影描述信息 CREATE TABLE IF NOT EXISTS film ( film_i ...
- PowerDesigner PDM生成sql脚本时:表的名称和表里面的字段名称都有引号解决。。。
PowerDesigner PDM生成sql脚本时:表的名称和表里面的字段名称都有引号解决... 1.当你的PowerDesigner 是新安装时,你得设置可能就会出现一些问题,在这里比如:PDM生成 ...
- SQL 查询某字段id为空(不为空)
1 sql 查询某字段id为空 select * from 表名 where id is null ; 2 sql 查询某字段id不为空 select * from 表名 wher ...
- 获取设备 ID 和名称
获取设备 ID 和名称 .NET Framework 3.5 其他版本 更新:2007 年 11 月 要获取设备的名称,请使用 Dns.GetHostName 属性.通常情况下,默认名称为“P ...
- 简单实用SQL脚本Part:查找SQL Server 自增ID值不连续记录
原文:简单实用SQL脚本Part:查找SQL Server 自增ID值不连续记录 在很多的时候,我们会在数据库的表中设置一个字段:ID,这个ID是一个IDENTITY,也就是说这是一个自增ID.当并发 ...
- 【java/oralce/sql】往一张仅有id,名称,创建时间三个字段的表中插入百万数据需要多久?1分26秒
代码下载:https://files.cnblogs.com/files/xiandedanteng/fastfilltable20191222.rar 表testtb18的结构如下: CREATE ...
- 如何用sql批量删除一个id段内的dedecms文章?
之前因为ytkah批量添加了dedecms文章,数量有些多,后面出现问题了,想要删除一部分织梦文章,后台一篇篇删,删到手软(相关内容:修改dedecms关键词到手软),于是就想到了sql数据库操作!那 ...
- MS SQL 多连接数时修改数据库名称
在MS SQL中,如果你想修改某一个数据库的名称,你可以通过下面几种方法实现. 方法一:使用SP_RENAMEDB系统存储过程实现. 语法: sp_renamedb [ @dbname = ] 'ol ...
随机推荐
- [置顶] ROS探索总结(十一)——机器视觉
机器视觉在计算机时代已经越来越流行,摄像头价格越来越低廉,部分集成深度传感器的混合型传感器也逐渐在研究领域普及,例如微软推出的Kinect,而且与之配套的软件功能十分强大,为开发带来了极大的便利.RO ...
- kubernetes入门之kube-proxy实现原理
kube-proxy service是一组pod的服务抽象,相当于一组pod的LB,负责将请求分发给对应的pod.service会为这个LB提供一个IP,一般称为cluster IP. kube-pr ...
- Js 获取当前月的天数
function getDays() { //构造当前日期对象 var date = new Date(); //获取年份 var year = date.getFullYear(); //获取当前月 ...
- JS —— 数组与字符串方法
数组 1. 基本方法 1)Array.prototype.unshift(item1,item2,item3...) 描述: 在数组的前面添加元素,一次可以传入多个参数. 注意:元素会根据当前传入的 ...
- 在VisualStudio中显示当前的分支名
当项目多的时候,当分支多的时候,当会议多的时候. 你打开VS,你是否犹豫过,"我现在是打开的哪个分支?!!!!??!" 如果你米有犹豫过,是否有过,"FXXXXK, 我怎 ...
- 从0到1一步步搭建代码质量检测系统~iOS
演示环境:Mac OSX10.12.2 Xcode8 先瞄一眼最终成果- 1.JDK,DBMS(演示环境使用Mysql) 2.创建sonar数据库和用户 mysql -u root -pCREATE ...
- InnoDB的约束机制
数据完整性 关系型数据库系统和文件系统的一个不同点是,关系数据库本身能保证存储数据的完整性,不需要应用程序的控制,而文件系统一般需要在程序端进行控制.几乎所有的关系型数据库都提供了约束(constra ...
- Unity中的Mathf类
Mathf.Abs绝对值 计算并返回指定参数 f 绝对值. Mathf.Acos反余弦 static function Acos (f : float) : float 以弧度为单位计算并返回参数 f ...
- TypeScript 学习二 表达式和循环
表达式: 1,箭头表达式:将function用箭头代替,参数相应进行处理: 用来声明匿名函数,消除了传统匿名函数的this指针问题: 1) 例:简单的方法体为单行的方法,此时不需要大括号和return ...
- [JS]省市区数据及方法调用
调用方法: function GetProvinceByid(id) { if (id == null || id == undefined || id == "") return ...