2011-08-05 60 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;