Oracle SQL不适用于MS Access

Oracle SQL不适用于MS Access,sql,ms-access,Sql,Ms Access,我是Oracle DBA,不熟悉MS Access。请您帮助我转换以下SQL以使其适用于MS Access,好吗?万分感谢 select (case when subject like '%requires your attention%' then 'Project Leader: ' + LEFT(CC, case when CHARINDEX(';',cc)=0 then LEN(cc) else CHARINDEX(';',cc)-1 end)

我是Oracle DBA,不熟悉MS Access。请您帮助我转换以下SQL以使其适用于MS Access,好吗?万分感谢

select
   (case 
       when subject like '%requires your attention%' 
         then 'Project Leader: ' + LEFT(CC, case when CHARINDEX(';',cc)=0 then LEN(cc) else CHARINDEX(';',cc)-1 end)

       when subject like '%Assigned or Changed%'  
         then 'Project assigned DBA: ' + LEFT(CC, case when CHARINDEX(';',cc)=0 then LEN(cc) else CHARINDEX(';',cc)-1 end) 

       when subject like '%Off Hold%' 
         then 'Project Leader: ' + LEFT(CC, case when CHARINDEX(';',cc)=0 then LEN(cc) else CHARINDEX(';',cc)-1 end)

       when subject like '%On Hold%' 
         then 'Project Leader: ' + LEFT(CC, case when CHARINDEX(';',cc)=0 then LEN(cc) else CHARINDEX(';',cc)-1 end)

       else 'project leader or assigneed is not specified'

   end) as project_assignee
from 
   project

首先,您的语法不是Oracle,它看起来像SQL Server

我认为在MS Access中应使用以下(模输入错误):

select iif(subject like '*requires your attention*',
           'Project Leader: ' & iif(cc NOT LIKE '*;*', CC, LEFT(cc, INSTR(cc, ';') - 1))
           iif(subject like '*Assigned or Changed*',
               'Project assigned DBA: ' & iif(cc NOT LIKE '*;*', CC, LEFT(cc, INSTR(cc, ';') - 1))
               iif(subject like '*Off Hold*',
                   'Project Leader: ' & iif(cc NOT LIKE '*;*', CC, LEFT(cc, INSTR(cc, ';') - 1))
                   iif(subject like '*On Hold*',
                       'Project Leader: ' & iif(cc NOT LIKE '*;*', CC, LEFT(cc, INSTR(cc, ';') - 1)),
                       'project leader or assigneed is not specified'
                      )
                  )
              )
          ) as project_assignee
from project;
变化:

  • MS Access不支持
    大小写
    ,请改用嵌套的
    iif()
  • 与MS Access中的
    类似,使用不同的通配符,因此
    *
    而不是
    %
  • 没有
    CHARINDEX()
    。相反,
    INSTR()
  • 字符串串联是
    &
    ,而不是
    +

首先,您的语法不是Oracle,它看起来像SQL Server

我认为在MS Access中应使用以下(模输入错误):

select iif(subject like '*requires your attention*',
           'Project Leader: ' & iif(cc NOT LIKE '*;*', CC, LEFT(cc, INSTR(cc, ';') - 1))
           iif(subject like '*Assigned or Changed*',
               'Project assigned DBA: ' & iif(cc NOT LIKE '*;*', CC, LEFT(cc, INSTR(cc, ';') - 1))
               iif(subject like '*Off Hold*',
                   'Project Leader: ' & iif(cc NOT LIKE '*;*', CC, LEFT(cc, INSTR(cc, ';') - 1))
                   iif(subject like '*On Hold*',
                       'Project Leader: ' & iif(cc NOT LIKE '*;*', CC, LEFT(cc, INSTR(cc, ';') - 1)),
                       'project leader or assigneed is not specified'
                      )
                  )
              )
          ) as project_assignee
from project;
变化:

  • MS Access不支持
    大小写
    ,请改用嵌套的
    iif()
  • 与MS Access中的
    类似,使用不同的通配符,因此
    *
    而不是
    %
  • 没有
    CHARINDEX()
    。相反,
    INSTR()
  • 字符串串联是
    &
    ,而不是
    +

Case
语句替换为函数,将
CHARINDEX
替换为函数。或者,通过ODBC连接Oracle并将SQL保留在中。原始语法不是Oracle。这是SQL Server。您应该适当地更新问题。用函数替换
Case
语句和
CHARINDEX
。或者,通过ODBC连接Oracle并将SQL保留在中。原始语法不是Oracle。这是SQL Server。您应该适当地更新问题。在转换
CASE
构造时,通常是比嵌套的IIf()函数更好的替代品。
IIf
是一个被称为MS Access SQL的典型例子。如果微软打算包括类似的功能,为什么要重命名它?每次我看到它都会闪回。在转换
CASE
构造时,它通常比嵌套的IIf()函数更好。
IIf
是一个被称为MS Access SQL的杂种方言的光辉例子。如果微软打算包括类似的功能,为什么要重命名它?我每次看到它都会闪回过去。