sql-server - 将函数应用于列中的一行

标签 sql-server function split

我正在尝试将我编写的拆分函数应用到表中的一个特定行。后来,我想将该函数应用于整个列,但第一步遇到了问题。

我基本上尝试了下面的所有变体。

SalesPersons 是我想要应用拆分函数的列。

SELECT ID,
       (SELECT ITEM
        FROM  [dbo].[Split](SalesPersons, ','))
FROM   [dbo].[Menu]
WHERE  ID = '1234'
       AND APPLICANT = 'JohnSmith'

SELECT * dbo.Split(SalesPersons, ',')
FROM   [dbo].[Menu]
WHERE  ID = '1234'
       AND APPLICANT = 'JohnSmith'

我不断得到以下结果:

找不到列 dbo 或用户定义函数或聚合 dbo.Split,或者名称不明确。

如果有人可以提供任何反馈或帮助,我将非常感激!

最佳答案

我假设您的分割函数是表值函数

那么您需要一个CROSS APPLY(使用OUTER APPLY来查看空值)

示例

Select A.* 
      ,B.*
 From [dbo].[Menu] A
 Cross Apply dbo.Split(SalesPersons, ',') B
 Where ID = '1234' 
   and APPLICANT = 'JohnSmith'

EDIT - If you want the split values in one row

Select A.*
      ,B.*
 From  [dbo].[Menu] A
 Cross Apply (
                Select Pos1 = ltrim(rtrim(xDim.value('/x[1]','varchar(100)')))
                      ,Pos2 = ltrim(rtrim(xDim.value('/x[2]','varchar(100)')))
                      ,Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(100)')))
                      ,Pos4 = ltrim(rtrim(xDim.value('/x[4]','varchar(100)')))
                From  (Select Cast('<x>' + replace((Select replace(A.SalesPersons,',','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A 
              ) B

关于sql-server - 将函数应用于列中的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53972043/

相关文章:

java - 仅在外大括号中用逗号分割字符串的算法

c# - 使用linq拆分数字和字符串

c# - 我在 winforms C# 中将 excel db 文件上传到 sql server 时出错

sql - like语句是否会吸引SQL注入(inject)

c# - 具有多个可选一对一关系的 Entity Framework 表

c - 跳过字符串中的单词数,由一个参数指示

sql-server - MS Access 直通选择查询导致 SQL Server 中的页面锁定

javascript - 当我为不同的条件设置不同的 if 语句时,为什么只输出一个 if 语句?

javascript - 重新启动函数会产生意外结果

r - 如何根据R中列值的范围拆分数据帧?