Sql 列数据格式

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

我有一个DB table FILE_table,要求将文件名和扩展名合并到一个新列中。文件扩展名可以是任何内容。这将在MIMETYPE列中提到。它可以是application/pdf、image/tiff或audio/x-ms-wma等

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)