1

我目前正在尝试将此查询从 Access 转换为正确的 SQL。语句中的 Left 和 Mid 函数让我有点困惑。

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

任何试图理解这一点的帮助将不胜感激。

4

2 回答 2

3

您可以使用SUBSTRINGforMIDLEFT。条件IIF语句存在于某些 SQL 方言中,但使用语句可能更安全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 
于 2013-05-30T20:57:11.303 回答
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

SUBSTRING完全用作MID. 该CASE语句允许您指定多个WHEN..THEN条件以及ELSE.

于 2013-05-30T20:58:48.503 回答