转换Access Left&中到SQL

时间:2013-05-30 20:53:52

标签: sql sql-server tsql ms-access sql-server-2008-r2

我目前正在尝试将此查询从Access转换为适当的SQL。 声明中的左和中功能让我有点困惑。

SELECT 
name, 
entnum

IIf(Left(Mid([entnum],4,3),1)=0,Mid([entnum],5,2),Mid([entnum],4,3)) as AGENCYCODE

FROM CUSTFILE 

entnum字段的类型为varchar 15

任何帮助您尝试理解这一点都将非常感激。

2 个答案:

答案 0 :(得分:3)

您可以将SUBSTRING用于MIDLEFT。 SQL的某些方言中存在条件IIF语句,但使用CASE语句可能更安全。

观察你的陈述,我认为可以简化为以下内容:

SELECT 
    name, 
    entnum,
    CASE 
        WHEN SUBSTRING(entnum,4,1) = '0' THEN SUBSTRING(entnum,5,2)
        ELSE SUBSTRING(entnum,4,3) 
    END agencycode
FROM CUSTFILE 

答案 1 :(得分:2)

请改为尝试:

SELECT
  name,
  entnum,
  CASE
    WHEN LEFT(SUBSTRING([entnum], 4, 3), 1) = '0'
      THEN SUBSTRING([entnum], 5, 2)
    ELSE SUBSTRING([entnum], 4, 3)
  END as AGENCYCODE
FROM CUSTFILE

SUBSTRINGMID的用法完全相同。 CASE语句允许您指定多个WHEN..THEN条件以及ELSE