2011-08-05 62 views
0

我想将一个if语句合并到SQL中,以确定字符串的值是否等于“”(并且我不是指空字符串 - 我的意思是两个引号字符串)。我怎样才能做到这一点。我想SQL看起来是这样的:检查字符串值

Select iif(Answer="","No Response", Answer) 
From tblAnswers 

回答

2

它看起来像你使用Microsoft Access(通过判断使用iif)。为了逃避双引号,你应该能够做到:

Select iif(Answer = """""", "No Response", Answer) 
From tblAnswers 
+0

感谢您阅读iif声明并意识到我忘记提及 - 我正在使用MS Access。完美的作品! – Martian

6
SELECT CASE 
     WHEN Answer = '""' THEN 'No Response' 
     ELSE Answer 
     END AS Answer 
    FROM tblAnswers 
+0

+1将与所有dbs一起工作 – Bohemian

+1

@Bohemian - 我不会那么肯定。 iif是不支持完整SQL的Microsoft Access的无用赠品。不知道它是否会允许CASE语句。 –

+0

它肯定不会与Access一起工作,因为Access/Jet/ACE SQL没有SELECT CASE。但是,对“'”“''进行测试肯定会奏效。用户如何使用Access输入两个双引号,我不知道 - 当我尝试访问Access时,出现一个错误,显示它将“'”的条目解释为尝试存储零长度字符串(我绝不允许在我的任何领域)。 –

0

您需要使用转义字符。在SQL我相信这将是

Answer = "\"\""; 
+0

不适用于Access/Jet/ACE,但OP没有指示数据库引擎。 –

0

试试这个:

select if(Answer='""', 'No Response', Answer) as Answer 
From tblAnswers 

确切的语法将与您实际的数据库而有所不同。您可能需要一个CASE如果你的数据库不支持if

2

SQL服务器:

SELECT ISNULL(NULLIF(Answer, ""), "No Response") 
+0

这是不正确的。 OP所说的字符串将会是2个引号,而不是空的。 –

2

尝试:

SELECT CASE WHEN Answer = '' THEN 'No Response' ELSE Answer END FROM tblAnswers

+0

不适用于Access/Jet/ACE,但OP没有指示数据库引擎。 –

0

对于Oracle

select decode(answer,"''''","No response",answer) from tblanswers 
0
SELECT ISNULL(NULLIF(Answer,'""'), 'No Response') Answer 
FROM tblAnswers 

如果列包含两个单引号,用这个:

SELECT ISNULL(NULLIF(Answer, ''''), 'No Response') Answer 
FROM tblAnswers 
+0

不适用于Access/Jet/ACE,但OP没有指明数据库引擎。 –

2

访问'数据库引擎会识别单引号或双引号中的字符串文字。因此,尽管这个人会工作...

Select IIf(Answer = """""", "No Response", Answer) 
From tblAnswers; 

...单引号将使其更清晰,海事组织,我想不太可能失去双引号的适当数量的轨道时,我的眼睛累了。所以,我应该这样做,而不是...

Select IIf(Answer = '""', 'No Response', Answer) 
From tblAnswers; 

如果你也想输出无响应当回答是空或空字符串,试试这个...

Select IIf(Answer = '""' OR Len(Answer & "") = 0, 'No Response', Answer) 
From tblAnswers; 
0
SELECT IIF(Answer = CHAR(34) & CHAR(34), 'No Response', Answer) 
    FROM tblAnswers;