我有一个如下所示的字符串
function getUserPosition(callback) {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
function (position) {
callback(new google.maps.LatLng(position.coords.latitude, position.coords.longitude));
}, function () {
callback(defaultPosition()); // #2
});
} else {
callback(defaultPosition()); // #3
}
}
getUserPosition(function(latLng){
//do all operations that depends on latLng here in the callback function
})
我需要根据#CheckBox1 {
margin-top: 700px;
}
#CheckBox2 {
margin-top: 700px;
}
拆分它。
所以,结果将是:
a_b|c_d
然后,我想再次使用|
拆分它,结果将是:
a_b
c_d
是否可以一步完成?就像输入相应的字符串一样,它将返回如下值:
_
我创建了一个拆分函数:
a
b
c
d
结果是:
a
b
c
d
但我不知道如何使用这些结果进行下一次拆分?
使用临时表,我希望我能做到这一点,但我需要在函数中使用它。所以我认为临时表不是一个好选择。游标也是一个选项,但是当我使用游标时,它会降低性能,因为我有数千条记录。
我的意见是:
select items from dbo.splitdetails('a_b|c_d','|')
希望出局是:
a_b
c_d
答案 0 :(得分:7)
您可以先使用Sql Replace函数,然后使用下面的分割函数
select REPLACE('a_b|c_d','|','_')
results: a_b_c_d
现在使用您的分割功能,如下所示
select items from dbo.splitdetails('a_b_c_d','_')
编辑:
一次一个
select items from dbo.splitdetails(REPLACE('a_b|c_d','|','_'),'_')
EDIT1:
在这种情况下,使用“反向”中的“替换”选项
select items from dbo.splitdetails(REPLACE('a_b|c_d','_','|'),'|')
答案 1 :(得分:5)
您可以像这样使用CROSS APPLY
。
SELECT d.item,e.item from dbo.splitdetails('a_b|c_d','|') d
CROSS APPLY dbo.splitdetails(d.item,'_') e
答案 2 :(得分:2)
在sql中有一个CURSOR
然后使用fetch
从第一次选择中获取每个SubString
DECLARE db_cursor CURSOR FOR
select items
from bdo.splitdetails('a_b|c_d','|')
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @items
WHILE @@FETCH_STATUS = 0
BEGIN
select SubString
from bdo.splitdetails(@items,'_')
--do something on SubString--
FETCH NEXT FROM db_cursor INTO @items
END
CLOSE db_cursor
DEALLOCATE db_cursor
答案 3 :(得分:1)
这有帮助..
With value(Item) as
(
select items from bdo.splitdetails('a_b|c_d','|')
)
Select x.Items from value a
cross apply (
select items from bdo.splitdetails(a.Item,'_')
) x ;
答案 4 :(得分:1)
您可以使用PATINDEX
函数将字符串拆分为多个分隔符。这是完整的功能和示例输出。
CREATE FUNCTION [dbo].[splitdetails]
(
@input VARCHAR(100),
@delim VARCHAR(100)
)
RETURNS @table TABLE
(
items VARCHAR(100)
)
AS
BEGIN
DECLARE @index INT;
SET @index = PATINDEX(@delim, @input)
WHILE @index > 0
BEGIN
INSERT INTO @table SELECT LEFT(@input, @index - 1)
SET @input = RIGHT(@input, LEN(@input) - @index)
SET @index = PATINDEX(@delim, @input)
END
INSERT INTO @table SELECT @input
RETURN
END
GO
SELECT items FROM dbo.splitdetails('a_b|c_d', '%[_|]%')
-- a
-- b
-- c
-- d
SELECT items FROM dbo.splitdetails('xxx|yyy', '%[_|]%')
-- xxx
-- yyy
SELECT items FROM dbo.splitdetails('xxxxxxx', '%[_|]%')
-- xxxxxxx
答案 5 :(得分:0)
使用此功能可能会有所帮助
select items from bdo.splitdetails(REPLACE('a_b|c_d','|','_'),'_')