我有一个Oracle数据库,其中存储了文件位置。不幸的是,它没有正确格式化。
例如,文件位置为C:\images\00\45\34\34.IMG
,并以00453434
的形式存储在数据库中。
我可以使用CONCAT
将C:\images
和.IMG
放在列中,但我无法格式化\s
的实际位置。
我已尝试过to_char
和to_number
,但它需要指定的格式。
(我的蹩脚尝试:to_char(filename, '09"\"09"\"09"\"09'))
SQL中有什么方法可以自由格式化吗?
答案 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