2016-09-29 56 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