Sql 列数据格式
我有一个DB table FILE_table,要求将文件名和扩展名合并到一个新列中。文件扩展名可以是任何内容。这将在MIMETYPE列中提到。它可以是application/pdf、image/tiff或audio/x-ms-wma等Sql 列数据格式,sql,oracle,Sql,Oracle,我有一个DB table FILE_table,要求将文件名和扩展名合并到一个新列中。文件扩展名可以是任何内容。这将在MIMETYPE列中提到。它可以是application/pdf、image/tiff或audio/x-ms-wma等 FILE_TABLE ----------------------------------------------------------------------- ID MIMETYPE DOC_NAME TITLE
FILE_TABLE
-----------------------------------------------------------------------
ID MIMETYPE DOC_NAME TITLE DOC_TITLE
-----------------------------------------------------------------------
1. image/jpeg abc_image null abc_image.jpeg
2. image/jpeg xyz_image.jpeg null xyz_image
3. image/jpeg lmn_image lmn_image.jpeg null
4. image/jpeg 123_img 123_img null
5. image/jpeg 567_img null 567_img
6. image/jpeg null 987_img 987_img
7. image/jpeg 321_img 321_img 321_img
8 app/pdf abc null abc
我还将使用MIMETYPE_表查找表进行扩展。像这样的
MIMETYPE_TABLE
-------------------------------
ID MIMETYPE FILE_EXT
-------------------------------
1 application/json json
2 image/jpeg jpeg
3 application/pdf pdf
4 audio/x-ms-wma wma
预期结果应该是扩展名为NEW_DOCNAME的限定文件名,如下所示
FILE_TABLE
----------------------------------------------------------------------------
ID MIMETYPE DOC_NAME TITLE DOC_TITLE NEW_DOCNAME
----------------------------------------------------------------------------
1. image/jpeg abc_image null abc_image.jpeg abc_image.jpeg
2. image/jpeg xyz_image.jpeg null xyz_image xyz_image.jpeg
3. image/jpeg lmn_image lmn_image.jpeg null lmn_image.jpeg
4. image/jpeg 123_img 123_img null 123_img.jpeg
5. image/jpeg 567_img null 567_img 567_img.jpeg
6. image/jpeg null 987_img 987_img 987_img.jpeg
7. image/jpeg 321_img 321_img 321_img 321_img.jpeg
8 app/pdf abc null abc abc.pdf
您需要将表与查找表联接,并生成所需的值,如下所示:
select f.*,
coalesce(f.doc_name, f.title, f.doc_title)
|| case when
instr(coalesce(f.doc_name, f.title, f.doc_title), '.' || m.file_ext) = 0
then m.file_ext
end as new_docname
from file_table f
join mimetype_table m
on (f.mimetype = m.mimetype)
干杯 您已经告诉了我们您的需求,但并没有告诉我们您一直在坚持什么-您还没有展示您尝试了什么或它有什么问题。还有,您是如何从mime类型派生扩展的,您是否有一个查找,或者您只是假设斜杠后的位是正确的(这对WMA来说并不适用)?如果设置了
doc\u name
、title
和doc\u title
中的多个,但不同,会发生什么情况?会发生这种情况吗?如果是,哪个优先?如果这些值已经有一个扩展名,但它与mime类型不匹配怎么办?@Alex Poole我可以创建一个矿山类型查找表。我更新了我的问题。谢谢
select f.*,
coalesce(f.doc_name, f.title, f.doc_title)
|| case when
instr(coalesce(f.doc_name, f.title, f.doc_title), '.' || m.file_ext) = 0
then m.file_ext
end as new_docname
from file_table f
join mimetype_table m
on (f.mimetype = m.mimetype)