Teradata 15:从STRING中提取数字并将其放入DECIMAL

时间:2017-11-24 15:25:47

标签: sql teradata

我需要像这样提取srings:

QQ_34_5
HHR_43_9
ET_7_25

进入DECIMAL号码,收到此信息:

34,50
43,90
7,25

什么是正确的功能?

THX

3 个答案:

答案 0 :(得分:4)

使用REGEXP_SUBSTRTO_NUMBER的另一种方式:

 To_Number(RegExp_Substr(col, '([0-9])+_([0-9])+$'), '9999D99', 'NLS_NUMERIC_CHARACTERS = ''_.''')

答案 1 :(得分:2)

使用REGEXP_REPLACE

SELECT
    REGEXP_REPLACE(col, '[A-Za-z0-9]+_([0-9])+_([0-9])+$', '\1,\2', 1, 0) AS output
FROM yourTable;

如果你真的需要真正的小数,那么你可以投射上述输出,例如

SELECT
    CAST(REGEXP_REPLACE(col, '[A-Za-z0-9]+_([0-9])+_([0-9])+$', '\1.\2', 1, 0)
         AS DECIMAL(10,2)) AS output
FROM yourTable;

答案 2 :(得分:0)

有多种方法可以做到这一点。

1)使用substring和instring。

2)Strtok功能

strtok(colname, '_', 2)||','||strtok(colname, '_', 3)||'0'

3)正则表达式功能