sql - 字符串拆分sql函数仅返回字符串中的第一个单词

标签 sql sql-server split

我有一个功能:


ALTER FUNCTION [dbo].[func_ParseString] (@list nvarchar(MAX))
   RETURNS @tbl TABLE (string VARCHAR(500) NOT NULL) AS
BEGIN
   DECLARE @pos        int,
           @nextpos    int,
           @valuelen   int

   SELECT @pos = 0, @nextpos = 1

   WHILE @nextpos > 0
   BEGIN
      SELECT @nextpos = charindex(', ', @list, @pos + 1)
      SELECT @valuelen = CASE WHEN @nextpos > 0
                              THEN @nextpos
                              ELSE len(@list) + 1
                         END - @pos - 1
      INSERT @tbl (string)
         VALUES (substring(@list, @pos + 1, @valuelen))
      SELECT @pos = @nextpos
   END
  RETURN
END

我有一张 table

<表类=“s-表”> <标题> id 姓名 年龄 <正文> 1 丹 20 2 克里斯 30 3 安迪 20

当我尝试 select in 语句时,它仅返回逗号分隔字符串中名字的所有值

SELECT * FROM table  
WHERE name IN (SELECT string COLLATE DATABASE_DEFAULT FROM [dbo].[func_ParseString]('Dan, Andy')

当我想返回第 1 行和第 3 行时,这只返回第 1 行

有人可以帮忙吗?

最佳答案

您的函数在 Andy 前面返回一个前导空白。

您应该使用LTRIM函数来删除它。在函数中,插入@tbl:

 INSERT @tbl (string)
         VALUES (LTRIM (substring(@list, @pos + 1, @valuelen)))

或者当你调用函数时:

SELECT LTRIM(string) FROM [dbo].[func_ParseString] ('Dan, Andy')

关于sql - 字符串拆分sql函数仅返回字符串中的第一个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17543934/

相关文章:

mysql - SELECT AND INSERT QUERY into multiple table with conditions

sql - 选择查询不会在 Linux 脚本中给出预期结果

sql - 查询以选择 "More Complete"重复记录

sql - 如何查找 SQL Server 实例的数据目录?

sql-server - SSDT 禁用重命名 - 重构日志

c# - 在 Web 应用程序中管理长时间运行的进程的策略?

sql - 表中的更新来自保存在列中的表名

java - 将输出分成 4 张椅子和蛮力方法的 block

map - 如何处理特定hadoop从站中文件中的行?

javascript - 仅当 div 包含特定文本时才运行 jQuery split() 函数