当前位置: 首页 > 面试题库 >

T-SQL从字符串中提取十进制值

洪俊拔
2023-03-14
问题内容

好的,所以我想做的是从字符串中提取十进制值。我的问题是字符串不统一。有些可能是6.9%或5.2mg /
L,有些可能根本没有数值。我想做的是仅从字符串中返回十进制(或整数)值,如果该值不存在,则返回NULL。

我已经尝试过此功能:

CREATE FUNCTION dbo.udf_GetNumeric
(@strAlphaNumeric VARCHAR(256))
RETURNS VARCHAR(256)
AS
BEGIN
DECLARE @intAlpha INT
SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric)
BEGIN
WHILE @intAlpha > 0
BEGIN
SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha, 1, '' )
SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric )
END
END
RETURN ISNULL(@strAlphaNumeric,0)
END

但这只会返回没有小数位的数字。


问题答案:

另一种方法是删除字符串之后和字符串之前的字符。下面的表达式可以做到这一点:

select val, 
       stuff(stuff(val+'x', patindex('%[0-9][^0-9.]%', val+'x') + 1, len(val), ''
                  ), 1, patindex('%[0-9]%', val) - 1, '')
from (values ('test123 xxx'), ('123.4'), ('123.4yyyyy'), ('tasdf 8.9'), ('asdb'), ('.2345')) as t(val);

内部stuff()删除数字后面的字符。的+'x' 处理时的数量为在字符串的末尾时出现的问题。第一部分处理编号之前的部分。

这确实假定字符串中只有一个数字。您可以使用where子句检查此内容,例如:

where val not like '%[0-9]%[^0-9.]%[0-9]%'


 类似资料:
  • 问题内容: 有一个名为myDate的文本字段。该字段可以包含1)“结束 某日期 的会计年度”或2)“ dateA 到” dateB ”。 在情况1)中,我想将字段date1 =设置为 someDate 。 在情况2)中,我要设置字段date1 = dateA 和字段date2 = dateB 。 所有日期( someDate , dateA , dateB )都可以写为2000年1月1日,2000

  • 我有一个字符串。我想从中提取。为此,我正在努力 但是在输出上我得到了。 我怎样才能走出地狱世界。 谢谢

  • 我有以下字符串 从上面,我需要提取下面的文字 第一个数字和文本之间总是有一个空格,所以2129和This is page1之间有一个空格。有时第一个数字被省略,就像2129不见了。文本和下一个数字之间总是有一个空格,所以在This is a Page1和6754001之间有一个空格,有时可能有两个空格。我只需要提取这些线这些线总是从空格开始,所以它可以 它们的后面总是有一个空格,有时是一个空格,有

  • 问题内容: 我想将十六进制字符串转换为二进制字符串。例如,十六进制2是0010。下面是代码: 但是,这仅适用于十六进制0-9;它不适用于十六进制A-F,因为它使用。谁能增强它? 问题答案: 您需要告诉Java int是十六进制的,如下所示:

  • 所谓字符串,指的就是字符的序列或者“串”。我们要在字符串上执行的第一个操作是提取所有字符中的一个。C++使用方括号([和])执行该操作: apstring fruit = "banana"; char letter = fruit[1]; cout << letter << endl; 表达式fruit[1]表明我们要从字符串变量fruit中取得编号为1的字符,并将结果保存在字符变量letter

  • 问题内容: 我想从包含数字和字母的字符串中提取数字: 我想在这里获取号码或任何其他号码。 问题答案: