[SQL] 从文本中提取数值

现需求从上方测试数据的“备注”列中提取出金额
目前有两个方法比较容易实现:
1、首先比较容易想到的就是利用函数stuff删除掉所有的非数值字符。
STUFF ( character_expression , start , length ,character_expression )
利用函数stuff,将所有非数值字符全部删除掉,自然就只剩下数值了。
首先需要定位到非数值的字符,用空字符替换掉这些字符,之后通过循环替换掉所有的非数值字符。
这里还需要函数patindex来定位字符串中的非数值字符。
PATINDEX ( '%pattern%' , expression )
自定义一个函数get_number如下:
IF OBJECT_ID('dbo.get_number') IS NOT NULL
DROP FUNCTION dbo.get_number;
GO
create function dbo.get_number(@S nvarchar(1000))
returns int
as
begin
while PATINDEX('%[^0-9]%', @S) > 0
begin
set @S = STUFF(@S, PATINDEX('%[^0-9]%', @S), 1, '')
end
return @S
end
go
select dbo.get_number('花费3200元') as result
go
运行结果如下:

调用该自定义函数完成查询,目标任务实现。

不过这里刚好数值都是整数,如果存在小数的情况,只需把自定义函数get_number中返回变量类型改为float,函数PATINDEX后匹配的字符中增加上“.”就可以了。
IF OBJECT_ID('dbo.get_number') IS NOT NULL
DROP FUNCTION dbo.get_number;
GO
create function dbo.get_number(@S nvarchar(1000))
returns float
as
begin
while PATINDEX('%[^.0-9]%', @S) > 0
begin
set @S = STUFF(@S, PATINDEX('%[^.0-9]%', @S), 1, '')
end
return @S
end
go
select dbo.get_number('花费45.02元') as result
go
2、利用函数substring抽取出字符串中的数值
SUBSTRING ( expression , start , length)
根据substring的用法,需要定位出数值开始的位置与结束的位置,并计算出数值的长度。数值开始位置,利用PATINDEX来实现。结束位置的获取,只需将字符串利用函数reverse进行翻转,之后再使用PATINDEX来获取。
IF OBJECT_ID('dbo.get_number') IS NOT NULL
DROP FUNCTION dbo.get_number;
GO
create function dbo.get_number(@S nvarchar(1000))
returns int
as
begin
set @S = SUBSTRING(@S,PATINDEX('%[0-9]%', @S),len(@S)-PATINDEX('%[0-9]%', @S)-PATINDEX('%[0-9]%', reverse(@S))+2)
return @S
end
go
select dbo.get_number('花费1200元') as result
go
[SQL] 从文本中提取数值的更多相关文章
- PHP正则表达式-从文本中提取URL
1.从文本中提取URL的正则表达式 '/https?:\/\/[\w-.%#?\/\\\]+/i'
- NLP入门(十一)从文本中提取时间
在我们的日常生活和工作中,从文本中提取时间是一项非常基础却重要的工作,因此,本文将介绍如何从文本中有效地提取时间. 举个简单的例子,我们需要从下面的文本中提取时间: 6月28日,杭州市统计局权 ...
- 从html富文本中提取纯文本
其实从html富文本中提取纯文本很简单,富文本基本上是使用html标签给文本加上丰富多彩的样式. 所以只需要将富文本字符串中的“<.....>”标签剔除,即可得到纯文本.我们可以使用正则表 ...
- 使用SQL除掉文本中特殊的ascll字符比如Enter,Tab,空格键
一.在SQL查询的字段中如果包含tab.enter.空格键,可以使用ascii码进行替换: --替换了文本中含有tab键,Enter键,空格键的ascii码 select REPLACE(REPLAC ...
- python从文本中提取某酒店机顶盒号和智能卡号
1.某项目中经常遇到需要关闭一些机顶盒消费权限.但是给过来的不是纯字符串,需要自己提取. 有400多个机顶盒和智能卡.nodepad++的列块模式也可以提取,但是还是稍微麻烦,因为列不对等 先复制到文 ...
- 从文本中提取图片路径(java 解析富文本处理 img 标签)
很多项目都需要到富文本来添加内容,就好比新闻啊,旅游景点之类的,都需要使用富文本去添加数据,然而怎么我这边就发现了两个问题 怎样将富文本的图片的 src 获取出来? 方法一: 利用正则表达式: pub ...
- cut 从文本中提取一段文字并输出
1.命令功能 cut 从每个文件中截取选定部分并输出. 2.语法格式 cut option file 参数说明 参数 参数说明 -b (–bytes) 字节 -c (--characters) 字 ...
- Python数据清洗:提取爬虫文本中的电话号码
步骤索引 效果展示 注意事项 代码 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识. ...
- NLP(十五)让模型来告诉你文本中的时间
背景介绍 在文章NLP入门(十一)从文本中提取时间 中,笔者演示了如何利用分词.词性标注的方法从文本中获取时间.当时的想法比较简单快捷,只是利用了词性标注这个功能而已,因此,在某些地方,时间的识别 ...
随机推荐
- 记录linux配置
只写成功过程:1.配置sshd: 首先开启安全组端口,选择合适端口(tcp),shell输入vi /etc/services ->ssh修改(21变更为合适端口) 接着shell输入vi /et ...
- 掩码图制作----c语言贴图
1.首先你得有一张图,比如这样的: 2.用PS打开他... 3.左边工具栏里(快速选择工具W),选想显示的部分 4.ctrl+c复制一下,新建一张黑底图粘贴上去或者白底图时选中显示区即花瓣右键反向右键 ...
- Excel文件上传功能实现
$(function(){ let file; //上传点击事件 $('#btn').bind('click', function(){ let val = $('#fb').filebox('get ...
- case when 和 decode 的比较分析
一.case when 与 if - else 类似,语句如下:CASE expr WHEN expr1 THEN return_expr1 [WHEN expr2 THEN retu ...
- 总结vue中父向子,子向父以及兄弟之间通信的几种方式
子向父方式1:通过props,如例子中子组件test1.vue向父组件App.vue传值 App.vue代码 <template> <div id="app"&g ...
- 20165214 2018-2019-2 《网络对抗技术》Exp1 PC平台逆向破解 Week3
<网络对抗技术>Exp1 PC平台逆向破解之"逆向及Bof基础实践说明" Week3 一. 实验预习 1.什么是漏洞?漏洞有什么危害? 漏洞就是在计算机硬件.软件.协议 ...
- Openresty 源码安装脚本
Openresty 中文官网地址 http://openresty.org/cn/ #! /bin/bash function openrestyinstall() { cd /opt/openres ...
- 安装openssh
在推进ansible用于配置管理与自动部署,其中一个很困扰的问题是创建ssh通道很慢,虽然ansible在同一个task里面是并行的控制多台受控端.但是每一个task都需要和受控端创建ssh通道,非常 ...
- Application对象及常用方法
Application对象: 服务器启动后,就产生了这个application对象.当一个客户访问服务器上的一个JSP页面时,JSP引擎为该客户分配这个 application对象,当客户在所访问的网 ...
- 一些面试题(关于string的)
一些常见的面试题: String a = "hello2"; String b = "hello" + 2; System.out.println(a == b ...