我有一个varchar数据类型的列。一些示例值类似于
abc 56 def
34 ghi
jkl mno 78
我只想获取数值,例如
56
34
78
提前致谢。
答案 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));