【发布时间】:2014-05-26 11:35:58
【问题描述】:
我是 sql 的新手,我想从以下字符串中提取“SWAMP RIVER NEAR DOVER PLAINS NY”:
<a href='http://waterdata.usgs.gov/nwis/nwisman/?site_no=01199490'>01199490</a> SWAMP RIVER NEAR DOVER PLAINS NY</a>
问题是我要提取的范围的长度在每一行中都不同。
我尝试了以下方法:
select substring (name, 80 , char_length(name) - 4 ) from stream_gages;
但我得到:SWAMP RIVER NEAR DOVER PLAINS NY</a> 不管我在减号后面放什么数字。
有什么办法可以做到吗?
所以,我真正想做的是将每个流计量站的代码和名称提取到新列中,包含在:
<a href='http://waterdata.usgs.gov/nwis/nwisman/?site_no=01199490'>01199490</a> SWAMP RIVER NEAR DOVER PLAINS NY</a>
为了做一些 GIS 查询。
代码是从位置 57 开始的数字,从位置 80 开始的名称(在大多数情况下代码长度不变的情况下)但是名称的长度在每一行中都不同。代码的长度也在几行中有所不同,但如果很难想出一个执行此操作的 sql,我可以手动编辑它。但是,对于所有 240 行中的名称,长度是不同的。谢谢。
【问题讨论】:
-
第三个参数是要提取的子串的长度,不是结束位置
-
您确定不想使用外部 HTML 解析器吗?
-
如果是
length of the range I want to extract varies in each row,显然你需要指定如何它的变化。请举例或更多解释。 -
感谢您的澄清。 @ClodoaldoNeto 我对 JS 和 SQL 很陌生,以至于我不确定 HTML 解析器是什么。所以,是的。长度根据站名的长度而有所不同,但我知道每个站名都从位置 80 开始,并在位置 80 之后的第一个字符“
标签: postgresql substring undefined string-length