相关文章推荐
神勇威武的馒头  ·  Unsafe code - C# ...·  1 年前    · 
很拉风的烈酒  ·  git rev-parse ...·  3 年前    · 
爱健身的麦片  ·  Uncaught (in promise) ...·  3 年前    · 
傻傻的键盘  ·  Insert keypresses ...·  3 年前    · 

一、环境 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的值。