更新:
有人将此问题标记为“如何分割字符串,以便我可以访问项目x”的重复项。但这是不同的,我的问题是关于Sybase SQL Anywhere,另一个是关于MS SQLServer。这是两个不同的SQL引擎,即使它们具有相同的来源,也具有不同的语法。因此它不是重复的。我首先在描述和标记中写了所有关于 SybaseSQL Anywhere的内容 。
我有田野 id_list='1234,23,56,576,1231,567,122,87876,57553,1216'
我想用它来搜索IN
该字段:
SELECT *
FROM table1
WHERE id IN (id_list)
id
是 integer
id_list
是 varchar/text
但是以这种方式行不通,因此我需要以某种方式拆分id_list
为选择查询。
我应该在这里使用什么解决方案?我正在使用T-SQL Sybase ASA 9数据库(SQL Anywhere)。
我看到的方式是,通过while循环创建自己的函数,并基于定界符位置搜索拆分每个元素,然后将元素插入到临时表中,该函数将作为结果返回。
就像 Mikael Eriksson 所说的那样,
dba.stackexchange.com上
有两个非常好的解决方案,一个是使用sa_split_list
系统过程的解决方案,第二是使用CAST
语句的解决方案。
由于sa_split_list
不存在Sybase SQL Anywhere
9系统过程,因此我进行了sa_split_list
系统过程替换(我使用了来自 bsivel 答案的部分代码):
CREATE PROCEDURE str_split_list (in str long varchar, in delim char(10) default ',') RESULT( line_num integer, row_value long varchar) BEGIN DECLARE str2 long varchar; DECLARE position integer; CREATE TABLE #str_split_list ( line_num integer DEFAULT AUTOINCREMENT, row_value long varchar null, primary key(line_num)); SET str = TRIM(str) || delim; SET position = CHARINDEX(delim, str); separaterows: WHILE position > 0 loop SET str2 = TRIM(LEFT(str, position - 1)); INSERT INTO #str_split_list (row_value) VALUES (str2); SET str = RIGHT(str, LENGTH(str) - position); SET position = CHARINDEX(delim, str); end loop separaterows; select * from #str_split_list order by line_num asc; END
执行sa_split_list
与默认分隔符相同的方法,
:
select * from
str_split_list(‘1234,23,56,576,1231,567,122,87876,57553,1216’)
或使用可以更改的指定定界符:
select * from
str_split_list(‘1234,23,56,576,1231,567,122,87876,57553,1216’, ‘,’)
问题内容: 我有一个长度未知的字符串,看起来像这样 将这些字符串用逗号分隔的最佳方法是什么,以便每个单词都可以成为的元素? 例如 问题答案: 你可以这样做: 基本上,该方法将根据你正在传递的(在这种情况下)定界符来分割字符串,并将返回字符串数组。 但是,你似乎位于字符串列表而不是数组之后,因此必须使用该实用程序将数组转换为列表。就像供你参考一样,你也可以这样做: 但是通常最好是对接口进行编程,而不
问题内容: 我有一个模糊的字符串,像这样: 我想按逗号分割-但我需要忽略引号中的逗号。我怎样才能做到这一点?似乎正则表达式方法失败了;我想我可以在看到报价时手动扫描并进入其他模式,但是使用预先存在的库会很好。(编辑:我想我的意思是那些已经属于JDK或已经属于诸如Apache Commons之类的常用库的库。) 上面的字符串应分为: 注意:这不是CSV文件,它是文件中包含的单个字符串,具有较大的整体
问题内容: 我有这样一个字符串: 我想按逗号分割-但我需要忽略引号中的逗号。我怎样才能做到这一点?似乎正则表达式方法失败了;我想我可以在看到报价时手动扫描并进入其他模式,但是使用预先存在的库会很好。 上面的字符串应分为: 问题答案: 可以使用正则表达式 输出:
问题内容: 这是我的表结构: 我需要拆分该列,并希望通过一个简单的sql查询来做到这一点,因为我不知道如何使用函数,并且希望将其保持简单。 这是我已经发现的: 但这仅输出 有没有一种方法来拆分一切从到,,等? 提前致谢。 问题答案:
问题内容: 我有一个像这样的字符串: 上面的字符串应分为: 问题答案: 我认为最简单的解决方案是处理输入字符串char-by-char: 例: 作为免费赠品,此解决方案还根据需要计算嵌套括号: 它还检查括号是否平衡(每个开放的括号都有相应的结束符)。
问题内容: 我需要将逗号分隔的字符串拆分为第二列,我具有下表: 我想将逗号后的数字分成第二列POS2,所以它应该像这样 所以我查询了以下内容: 问题答案: MySQL没有内置功能。相当于MySQL。 使用可能是更简洁的方法。这样的事情(免责声明:未经测试): 用于POS 用于POS2 顺便说一句,我可能会误解您要完成的工作,但看起来您可能想要现有的行,而不是新的行?就像是: