【发布时间】:2012-03-09 06:31:45
【问题描述】:
我正在搜索脚本以从 sql server 中的文本中提取数字,我发现了这个
CREATE FUNCTION [dbo].[GetNumbersFromText](@String VARCHAR(2000))
RETURNS @Number TABLE (Number INT)
AS
BEGIN
DECLARE @Count INT
DECLARE @IntNumbers VARCHAR(1000)
SET @Count = 0
SET @IntNumbers = ''
WHILE @Count <= LEN(@String)
BEGIN
--Find a numeric charactor
IF SUBSTRING(@String,@Count,1) >= '0' AND SUBSTRING(@String,@Count,1) <= '9'
BEGIN
SET @IntNumbers = @IntNumbers + SUBSTRING(@String,@Count,1)
END
--If the next charactor is not a numeric one, the current number ends, so add a separator
IF (SUBSTRING(@String,@Count+1,1) < '0'OR SUBSTRING(@String,@Count+1,1) > '9') AND SUBSTRING(@String,@Count,1) >= '0' AND SUBSTRING(@String,@Count,1) <= '9'
BEGIN
SET @IntNumbers = @IntNumbers + ','
END
SET @Count = @Count + 1
END
---Split string to give a table with the numbers in the text
INSERT INTO @Number
SELECT DISTINCT items FROM dbo.Split(@IntNumbers, ',')
return
END
然后这样称呼它
SELECT Number FROM Dbo.[GetNumbersFromText]('Give me 120 this week and 50 next week')
它工作正常,但我需要更短的代码。我可以使用 patindex 从文本中提取数字吗? 请任何人分享这样做的小而好的逻辑。谢谢
【问题讨论】:
-
为什么需要“更短的代码”和“小逻辑”?如果您的功能正常工作并且表现可以接受,那么根本没有理由更改它。
标签: sql sql-server tsql