2016-09-29 62 views
2

簡單的例子 這是在存儲過程中PHP轉換NULL在MSSQL空字符串存儲過程

select coalesce('(' + phone + ') ', '(' + number + ') ' 
from example_table 

因此,如果手機沒有空,我回去(手機)否則我回去(數量)。

這樣做的原因是MSSQL被配置爲CONCAT_NULL_YIELDS_NULL,基本上如果在concat中有一個NULL,那麼一切都變爲NULL。

可正常工作,當我從一個客戶端(SQLPro)運行

當我打電話從PHP代碼,這個SP我得到這個()括號只有當手機的值爲NULL和閱讀周圍似乎PHP將NULL轉換爲空字符串。

有誰知道一種方法來解決這個問題嗎?也許php.ini中的配置會強制PHP將NULL值視爲特殊值NULL而不是將它們轉換爲空字符串?

回答

0

只要改變表達的東西,不依賴於配置:

select '(' + coalesce(phone, number) + ') ' 
from example_table; 

如果你有更復雜的表達式,那麼你可能需要使用一個明確的case

select (case when phone is not null then '(' + phone + ') ' 
      else '(' + number + ') ' 
     end) 

當然,第一個版本更簡單,但是這可能更具概括性。

+1

這是有道理的。不幸的是,這是一個遺留系統,正在被遷移到AWS,因此它將需要更改幾十個存儲的特效。然而,在進一步調查後,我發現了這個問題,結果發現PHP與它無關。事實證明,新數據庫的CONCAT_NULL_YIELDS_NULL默認爲按預期開啓,但隨後該屬性被AWS覆蓋並關閉。 – Biondo