【发布时间】:2015-01-16 14:01:52
【问题描述】:
我有一张桌子,它有 3 列。 first column是包含值(数值)和单位(百分比等)的数据,第二列是numeric column,第三列是Unit column。我想要做的是从第一列中拆分数字和单位,然后将这些拆分后的数据放到其指定的列中。
这是我的桌子:
我试过这个函数:SO link here...,它确实可以拆分字母和数字,但是我是使用 SQL 函数的新手,我的问题是参数必须在字符串 STRING 中,所以我所做的是改变它到子查询,但它给了我错误。
示例代码:
SQL 函数:
create function [dbo].[GetNumbersFromText](@String varchar(2000))
returns table as return
(
with C as
(
select cast(substring(S.Value, S1.Pos, S2.L) as int) as Number,
stuff(s.Value, 1, S1.Pos + S2.L, '') as Value
from (select @String+' ') as S(Value)
cross apply (select patindex('%[0-9]%', S.Value)) as S1(Pos)
cross apply (select patindex('%[^0-9]%', stuff(S.Value, 1, S1.Pos, ''))) as S2(L)
union all
select cast(substring(S.Value, S1.Pos, S2.L) as int),
stuff(S.Value, 1, S1.Pos + S2.L, '')
from C as S
cross apply (select patindex('%[0-9]%', S.Value)) as S1(Pos)
cross apply (select patindex('%[^0-9]%', stuff(S.Value, 1, S1.Pos, ''))) as S2(L)
where patindex('%[0-9]%', S.Value) > 0
)
select Number
from C
)
带有 SUB 查询的 SELECT STATEMENT:
declare @S varchar(max)
select number from GetNumbersFromText(Select SomeColm From Table_Name) option (maxrecursion 0)
顺便说一句,我使用的是 sql server 2005。
谢谢!
【问题讨论】:
-
第一个空格之前的字符串是你的第二列值,空格之后的字符串是你的单位值。使用 charindex 和 substring 函数。
-
@knkarthick24 它没有与
space分隔,有些数据只有一行.. 比如percentage -
一个更好的数据集真的会帮助那些回答最好的人。问题中未正确显示您的数据的许多细微差别。
-
@Chris 我更新了我的数据。
-
看看我尝试处理你的所有场景。
标签: sql-server sql-server-2005 split