现需求从上方测试数据的“备注”列中提取出金额

目前有两个方法比较容易实现:

  • 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] 从文本中提取数值的更多相关文章

  1. PHP正则表达式-从文本中提取URL

    1.从文本中提取URL的正则表达式 '/https?:\/\/[\w-.%#?\/\\\]+/i'

  2. NLP入门(十一)从文本中提取时间

      在我们的日常生活和工作中,从文本中提取时间是一项非常基础却重要的工作,因此,本文将介绍如何从文本中有效地提取时间.   举个简单的例子,我们需要从下面的文本中提取时间: 6月28日,杭州市统计局权 ...

  3. 从html富文本中提取纯文本

    其实从html富文本中提取纯文本很简单,富文本基本上是使用html标签给文本加上丰富多彩的样式. 所以只需要将富文本字符串中的“<.....>”标签剔除,即可得到纯文本.我们可以使用正则表 ...

  4. 使用SQL除掉文本中特殊的ascll字符比如Enter,Tab,空格键

    一.在SQL查询的字段中如果包含tab.enter.空格键,可以使用ascii码进行替换: --替换了文本中含有tab键,Enter键,空格键的ascii码 select REPLACE(REPLAC ...

  5. python从文本中提取某酒店机顶盒号和智能卡号

    1.某项目中经常遇到需要关闭一些机顶盒消费权限.但是给过来的不是纯字符串,需要自己提取. 有400多个机顶盒和智能卡.nodepad++的列块模式也可以提取,但是还是稍微麻烦,因为列不对等 先复制到文 ...

  6. 从文本中提取图片路径(java 解析富文本处理 img 标签)

    很多项目都需要到富文本来添加内容,就好比新闻啊,旅游景点之类的,都需要使用富文本去添加数据,然而怎么我这边就发现了两个问题 怎样将富文本的图片的 src 获取出来? 方法一: 利用正则表达式: pub ...

  7. cut 从文本中提取一段文字并输出

    1.命令功能 cut 从每个文件中截取选定部分并输出. 2.语法格式 cut  option  file 参数说明 参数 参数说明 -b (–bytes) 字节 -c (--characters) 字 ...

  8. Python数据清洗:提取爬虫文本中的电话号码

    步骤索引 效果展示 注意事项 代码 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识. ...

  9. NLP(十五)让模型来告诉你文本中的时间

    背景介绍   在文章NLP入门(十一)从文本中提取时间 中,笔者演示了如何利用分词.词性标注的方法从文本中获取时间.当时的想法比较简单快捷,只是利用了词性标注这个功能而已,因此,在某些地方,时间的识别 ...

随机推荐

  1. 字符串的顺序倒置。(Reverse)

    实际遇到的问题:在串口获取码表数据的时候,有的码表传到电脑上的数字顺序是颠倒的,即:123.45,会显示为54.321.需要重新处理数据.方法很多,也不难实现,现在列举其中5个. public str ...

  2. unity解压缩zip发布后的一些问题

    前段时间项目需要,搞了下zip的解压缩问题,也是利用ICSharpCode.SharpZipLib.dll来处理的zip,这里说下之前遇到的坑(这里提供我用的这个库ICSharpCode.SharpZ ...

  3. python机器可读数据-XML

    XML XML是一门标记语言.也就是说,它具有包含格式化数据的文档结构. XML文档本质上只是格式特殊的数据文件. 在XML文件中有两个位置可以保存数据值:2个标签之间,标签的属性. 导入XML数据 ...

  4. java算法01 - 链表

    1.链表 在Java中实现链表,每个节点都有一个值,然后把它链接到下一个节点.下面来看一下节点的实现 class Node<E> { private E e; private Node&l ...

  5. *args和**kwargs的区别

    *args和**kwargs表示可变长度的参数. *args是元组类型: **kwargs是字典类型: 注意:arg.*args.**kwargs三个参数的位置必须是固定的,否则会报错.

  6. IntelliJ IDEA及maven、git下载与配置

    maven下载地址:http://maven.apache.org/download.cgi,下载bin文件然后解压 maven环境变量配置: MAVEN_HOME:D:  \install\apac ...

  7. servlet中常用到的工具

    1. 解析ajax传来的json字符串,得到json对象 private JSONObject getJsonObject(HttpServletRequest req) { StringBuffer ...

  8. input(Text)控件作为填空输入,但运行后,有曾经输入的记录显示,用autocomplete="off"解决

    系统中,有设计填空题,原来程序中,用input(Text)控件,   <input type="text" name="NO<%=rs("id&qu ...

  9. KendoUi 学习笔记一

    本系列主要是记录KendoUI的学习过程. KendoUi的特点有以下特点: 1. 70+UI控件 控件有DataGrids,DropDowns,Menus和Buttons,还有一些商业的控件,比如C ...

  10. 《A Knowledge-Grounded Neural Conversation Model》

    abstract 现在的大多数模型都可以被应用在闲聊场景下,但是还没有证据表明他们可以应用在更有用的对话场景下.这篇论文提出了一个知识驱动的,带有背景知识的神经网络对话系统,目的是为了在对话中产生更有 ...