首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从T中的字符串中提取最大数字

从T中的字符串中提取最大数字
EN

Stack Overflow用户
提问于 2015-04-15 14:38:58
回答 4查看 1.1K关注 0票数 2

我正在导入从excel文件导入的数据。有一个可以包含多个数字的字符串的列。我试图提取字符串中最大的数字,如果没有字符串,则提取0。这些字符串的格式类似于:"100%后消费者回收纸,50%后消费者回收封面,90%后消费者回收电线。““纸包含30%的后消费者内容.”有时是空字符串或空字符串。

考虑到字符串的不规则格式,我有麻烦,任何帮助都将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-04-15 15:36:40

这里有一个标量函数,它将一个字符串作为输入,并返回它找到的最大整数(最多3位数,但从您的问题中,我假设您处理的是百分比。如果需要更多的数字,请无限地重复If语句)。

将其粘贴到SSMS中,并运行它以创建函数。要叫它,就做这样的事:

代码语言:javascript
运行
复制
SELECT dbo.GetLargestNumberFromString(MyStringField) as [Largest Number in String]
FROM MyMessedUpData

功能:

代码语言:javascript
运行
复制
CREATE FUNCTION GetLargestNumberFromString
(
@s varchar(max)
) 
RETURNS int
AS
BEGIN

    DECLARE @LargestNumber int, @i int
    SET @i = 1
    SET @LargestNumber = 0

    WHILE @i <= LEN(@s)
    BEGIN

    IF SUBSTRING(@s, @i, 3) like '[0-9][0-9][0-9]'
        BEGIN
            IF  CAST(SUBSTRING(@s, @i,3) as int) > @LargestNumber OR @LargestNumber IS NULL
            SET @LargestNumber = CAST(SUBSTRING(@s, @i,3) as int);
        END

    IF SUBSTRING(@s, @i, 2) like '[0-9][0-9]'
        BEGIN
            IF  CAST(SUBSTRING(@s, @i,2) as int) > @LargestNumber OR @LargestNumber IS NULL
            SET @LargestNumber = CAST(SUBSTRING(@s, @i,2) as int);
        END

    IF SUBSTRING(@s, @i, 1) like '[0-9]' OR @LargestNumber IS NULL
        BEGIN
            IF  CAST(SUBSTRING(@s, @i,1) as int) > @LargestNumber
            SET @LargestNumber = CAST(SUBSTRING(@s, @i,1) as int);
        END

    SET @i = @i + 1


    CONTINUE
    END
    RETURN @LargestNumber
END
票数 1
EN

Stack Overflow用户

发布于 2015-04-15 14:49:06

  1. 按原样将数据拖到SQL中。
  2. 编写一个查询,以便在该列中获得不同的选项列表。
  3. 添加一个新列来存储所需的值
  4. 编写一个update语句来填充新列

至于确定最大的大小,我认为您需要首先查看您的数据集,但是更新可能非常简单:

代码语言:javascript
运行
复制
DECLARE @COUNTER INT=1000
While EXISTS (SELECT * FROM <Table> WHERE NewColumn is NULL) AND @COUNTER>=0
BEGIN
   UPDATE <Table> SET NewColumn=@COUNTER WHERE <SearchColumn> LIKE '%' + CONVERT(VARCHAR,@COUNTER) + '%' AND NewColumn is NULL

   SET @COUNTER=@COUNTER-1
END
票数 1
EN

Stack Overflow用户

发布于 2015-04-15 16:21:17

SQL Fiddle演示

生成LEN(txt)可能的txt片段。在第一个非数字字符处修剪每个片段。测试剩余部分是否为int。返回MAX()

代码语言:javascript
运行
复制
SELECT
  txt
 ,MAX(TRY_CONVERT(int,LEFT(RIGHT(txt,i),PATINDEX('%[^0-9]%',RIGHT(txt,i)+' ')-1)))
FROM MyTable
CROSS APPLY (
  SELECT TOP(LEN(txt)) ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) i FROM master.dbo.spt_values a, master.dbo.spt_values b
) x
GROUP BY txt
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29653226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档