使用非标准格式格式化Oracle SQL列

时间:2015-12-15 22:14:53

标签: sql oracle formatting concatenation oracle-sqldeveloper

我有一个Oracle数据库,其中存储了文件位置。不幸的是,它没有正确格式化。

例如,文件位置为C:\images\00\45\34\34.IMG,并以00453434的形式存储在数据库中。

我可以使用CONCATC:\images.IMG放在列中,但我无法格式化\s的实际位置。

我已尝试过to_charto_number,但它需要指定的格式。

(我的蹩脚尝试:to_char(filename, '09"\"09"\"09"\"09'))

SQL中有什么方法可以自由格式化吗?

2 个答案:

答案 0 :(得分:0)

一种方法...假设每个段的固定长度意味着每个路径是2位数,包括文件名。

BundleException

答案 1 :(得分:0)

如果需要多个查询,创建PL / SQL函数也可以解决您的问题。此示例还假设每个路径有2位数,但支持不同长度的路径:

CREATE OR REPLACE FUNCTION GET_FILENAME(ID IN VARCHAR2, PREFIX IN VARCHAR2, SUFFIX IN VARCHAR2) RETURN VARCHAR2 IS
  i PLS_INTEGER;
  r VARCHAR2(4000);
BEGIN
  r := PREFIX;
  FOR i IN 1..LENGTH(ID)/2 LOOP
    r := r || '\' || SUBSTR(ID, 2*i-1, 2);
  END LOOP;
  RETURN r || SUFFIX;
END;
/

然后可以在标准SQL查询(或视图定义)中使用该函数,如下所示:

WITH TA_FILES AS (
  SELECT '12345678' AS ID FROM DUAL
)
SELECT GET_FILENAME(ID, 'C:\images', '.IMG') FROM TA_FILES