我有一种情况,我需要从sql表格行中提取信息。 一个典型的字符串的样子,SQL逻辑提取信息
RMR*AZ*10001312**119.76
其中RMR
是确定该行的关键。我需要提取第二个和第三个*
之间的信息,即10001312
和第四个之后,即119.76
这些信息将填充在表中。
我怎么能做到这一点?
我有一种情况,我需要从sql表格行中提取信息。 一个典型的字符串的样子,SQL逻辑提取信息
RMR*AZ*10001312**119.76
其中RMR
是确定该行的关键。我需要提取第二个和第三个*
之间的信息,即10001312
和第四个之后,即119.76
这些信息将填充在表中。
我怎么能做到这一点?
在SQL Server中完成的一个示例,它可能对您有所帮助。
declare @myString varchar(50)
set @myString = 'sadfa*lkj*234r2*'
declare @startPosition int
declare @endPosition int
--First * location
select @startPosition = Charindex('*', @myString, 0)
--Second * location
select @endPosition = Charindex('*', @myString, @startPosition+1)
select @endPosition
select substring(@myString,
@startPosition +1 ,
@endPosition - @startPosition -1)
取决于您的数据库引擎。对于DB2我实现了这一点: https://stackoverflow.com/a/10175295/1336443
好了,你还没说你需要SQL方言,所以只是一个通用的答案之一:使用SQL的字符串操作,例如看这里:http://www.1keydata.com/sql/sql-substring.html
鉴于没有内建的SQL函数(我知道)解析一个字符串,我想建议使用用户定义的函数。然后你可以将你的字符串拆分为*
,并获得你关心的索引。
线程here有一些广泛的讨论和许多这样的功能的例子。
**什么**数据库系统,以及哪个版本? ** SQL **只是结构化查询语言(Structured Query Language) - 许多数据库系统使用的语言 - SQL是** NOT **数据库产品......类似这样的东西通常是供应商特定的 - 所以我们真的需要知道什么你正在使用的数据库系统.... – 2012-04-19 20:48:00
你不应该将所有的信息存储在单独的列而不是一个长字符串吗? – 2012-04-19 20:49:35
Microsoft T-SQL – OBL 2012-04-19 20:51:32