一、环境 SQL server 2000
二、需求:一张表 servicecategorydetail.bufin 存储的是 humres 表中的id,存储形式为字符串并逗号‘,’分割,想通过in的方式查询 servicecategorydetail.bufin 中信息。
1.执行SQL
select bufin from servicecategorydetail
2.执行SQL
select t1.bufin,
buFin2 = STUFF( (select ',' + objno from humres where id in (t1.bufin) FOR XML PATH('') ), 1, 1, '')
from servicecategorydetail t1
发现,多个值逗号拼接 8a7f4fd7651370ce0165137d19bd3bc7,8a7f4fd7651370ce0165137ea4374289 in方式不生效,即使 处理加上了 单引号, '8a7f4fd7651370ce0165137d19bd3bc7','8a7f4fd7651370ce0165137ea4374289', 也不生效。
那是因为,获取的结果 bufin 是字符串,而 in 中需要使用数组。
三、解决,字符串转数组,自定义函数 :字符串 循环截取法 function
CREATE FUNCTION F_SplitSTR(
@string varchar(8000), --待分拆的字符串
@symbol varchar(10) --数据分隔符
) RETURNS @table TABLE(col varchar(100))
BEGIN
DECLARE @splitlen int
SET @splitlen = LEN(@symbol) - 1
WHILE CHARINDEX(@symbol, @string) > 0
BEGIN
INSERT @table VALUES (LEFT(@string, CHARINDEX(@symbol, @string) - 1))
SET @string = STUFF(@string, 1, CHARINDEX(@symbol, @string) + @splitlen, '')
INSERT @table VALUES (@string)
RETURN
1.执行SQL :
select
t1.bufin,
buFin2 = STUFF( (select ',' + objno from humres where id in (select * from F_SplitSTR(t1.bufin,',')) FOR XML PATH('') ), 1, 1, '')
from servicecategorydetail t1
2.结果如下:
1.在处理时,发现执行SQL
SELECT F_SplitSTR(bufin,',') from servicecategorydetail
2.出现错误:[FreeTDS][SQL Server]'F_SplitSTR' is not a recognized built-in function name.
3.换做查询方式即可;
select * FROM F_SplitSTR((select top 1 bufin from servicecategorydetail), ',')
4.结果如下
五:尊重别人的知识产权,参考如下:
你想点我吗?
是concat的特殊形式,第一个参数是分隔符,分隔符会放到要连接的字符串之间,分隔符可以是字符串,也可以是其他参数。lateralview首先为原始表的每行调用UDTF,UTDF会把一行拆分成一或者多行,lateralview再把结果组合,产生一个支持别名表的虚拟表。select分类字段,concat_ws(’,’,collect_set(合并字段))as别名fromtable_namegroup分类字段;例concat_ws(‘,’,[‘a‘,‘b’])–>‘a,b’...
1、SparkSql数据类型1.1数字类型ByteType:代表一个字节的整数。范围是-128到127ShortType:代表两个字节的整数。范围是-32768到32767IntegerType:代表4个字节的整数。范围是-2147483648到2147483647LongType:代表8个字节的整数。范围是-9223372036854775808到9223372036854775807Float...
在 MySQL 中将分组查询后的某一个字段转成数组,可以使用函数。函数用于将某个字段的值连接起来,如果加上DISTINCT关键字,则会去除重复的值。我们可以利用这个函数来实现将某个字段的值转成数组的功能。以上 SQL 语句将products表按照category字段进行分组,并将每个分组中name字段的值连接成一个字符串,并添加了DISTINCT关键字来去除重复的值,最后别名为name_array的字段即为结果集中将name字段转成的数组。
update #TempColor set color_1 = dbo.Func_StrArrayStrOfIndex(color,'/',1)ALTER function [dbo].[Func_StrArrayStrOfIndex](@str varchar(1024), --要分割的字符串@split varchar(10), --分隔符号@index int --取第几个元素)...
- 能够完成该功能的代码有很多,以下为我认为 '最简写、优雅' 的写法
- 核心思想:regexp_substr('abc1,cbd2,db3,db5', '[^,]+', 1, rownum)
2 核心代码
--****************************************************************
-- regexp_substr(string, pattern, positi
按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。——返回字符串数组长度函数create function Get_StrArrayLength
@str varchar(5000), --要分割的字符串
@split varchar(10) --分隔符号
returns int
begin
JavaScript允许数组与字符串之间相互转换。其中 Array方法对象定义了 3个方法,可以把数组转换为字符串,如表所示。数组方法说明toString()将数组转换成一个字符串toLocalString()把数组转换成本地约定的字符串join()将数组元素连接起来以构建一个字符串Array 对象的数组与字符串相互转换方法数组方法说明toString()将数组转换成一个字符串toLocal...
val items = "[{\"skuId\": \"100101\", \"quantity\": 1},{\"skuId\": \"100104\", \"quantity\": 2}]"
假设dataframe中只有items一个字段,且为string类型,字段内容如上。那么现在的需求是希望能够获取到skuId和quantity的值。