子串如sqlserver中的mysql

时间:2017-09-07 09:21:55

标签: sql-server sql-server-2008

我是sql server的新手。我需要像mysql一样的substring_index。我正在使用substring,partindex for sqlserver。我在sql server中使用以下注释:

select substring('13.1039901,80.1294101',PATINDEX('%13.1039901,80.1294101%',','),1);

结果:

It gives empty result

但是在mysql中:

select substring_index('13.1039901,80.1294101',',',1) ;

结果:

13.1039901

注意: 我不知道某些情况下的子串数。任何人都可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

如果你在PATINDEX中使用这个模式,它应该返回1,因为模式匹配你的整个字符串 因此,如果您将结果替换为PATINDEX,则查询看起来像SUBSTRING('13.1039901,80.1294101', 1, 1)

现在SUBSTRING的工作原理如下:
SUBSTRING ( expression ,start , length )

这意味着您要返回的字符的起始索引是1(请参阅第一段),并且您要返回的字符串的长度也是1。 我没有自己测试,但我希望你的表达式返回 1 中的字符,如 1 3.1039901,80.1294101。

要获得您似乎正在寻找的结果,您可以使用
SELECT SUBSTRING('13.1039901,80.1294101', 1, CHARINDEX(',', '13.1039901,80.1294101') - 1)
这应该会在逗号之前给你一切。

这种方式start是字符串的开头,length是逗号的位置,因此字符串被截断。