Oracle SQL不适用于MS Access
我是Oracle DBA,不熟悉MS Access。请您帮助我转换以下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)
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()
- 字符串串联是
,而不是&
+
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的杂种方言的光辉例子。如果微软打算包括类似的功能,为什么要重命名它?我每次看到它都会闪回过去。