在teradata中提取数值

时间:2014-04-23 12:14:42

标签: sql teradata

我有一个varchar数据类型的列。一些示例值类似于

abc 56 def
34 ghi
jkl mno 78

我只想获取数值,例如

56
34
78

提前致谢。

4 个答案:

答案 0 :(得分:3)

如果你在TD14上,你可以简单地使用正则表达式:

REGEXP_SUBSTR(col, '[0-9]+')

在您拥有OTRANSLATE UDF之前,有一个老技巧可以删除任何字符,但需要列出一些字符:

OTRANSLATE(col,OTRANSLATE(col, '0123456789',''),'')

答案 1 :(得分:0)

您可以使用子字符串来执行此操作:

SELECT SUBSTRING(field, PATINDEX('%[0-9]%', field), LEN(field))

如果这有帮助,请告诉我! (我不完全确定Teradata支持PATINDEX,目前无法测试。)

编辑:查看http://carlosal.wordpress.com/2012/11/12/only-numbers-en-teradata-ii/来自专家的Teradata特定信息。

答案 2 :(得分:0)

SEL OTRANSLATE('abc 56 def', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()', '') 

列数据='abc 56 def''34 ghi''jkl mno 78'

SEL columnname,OTRANSLATE(columnname, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()', '') 
FROM TableA;

答案 3 :(得分:0)

如果您有Teradata 14,您可以使用正则表达式查找数值,然后使用子字符串来提取它。以下SQL假定您的字符串中有一个数字值。但是,REGEXP_INSTR的参数足够灵活,通过一些调整,您可以找到第二次或第三次出现,因为您的数值是由空格环绕的。这应该让你开始朝着正确的方向前进:

SELECT REGEXP_INSTR('abc 56 def', '[x0-9]', 1, 1, 0, 'i') AS Start_
     , REGEXP_INSTR('abc 56 def', '[x0-9]', 1, 1, 1, 'i') AS End_
     , SUBSTRING('abc 56 def' FROM Start_ FOR (End_ - Start_ + 1));