嗨,我有一个包含3列的表
id, params , xml
1, $pmn=67676$tns=67678787$=pro ,<ConsentDTO><OrderId>76676</OrderId><ReceiverInformation> <ReceiverType>SMS</ReceiverType><CellPhoneNumber>78787</CellPhoneNumber></ReceiverInformation></ConsentDTO>
我写了两个查询来从params和Xml colums返回电话号码 在参数列值中,tns = 67678787是电话号码 在节点CellPhoneNumber中的XML cplumn值是pone数
PARAMS
select SUBSTRING(params,
CHARINDEX('$tnr=',params) + 5,
CHARINDEX('$pro',params) - CHARINDEX('$tnr=',params)-5) from table1
XML
select table1.xml.value('(/ConsentDTO/ReceiverInformation/CellPhoneNumber/text())[1]','varchar(50)') from table1)
现在我的问题是,如果params列没有电话号码意味着其他查询应该执行。
你可以帮我使用条件陈述吗?答案 0 :(得分:0)
您可以创建视图并使用该字段的CASE ... WHEN语句。像这样:
SELECT (CASE WHEN params IS NULL THEN '' ELSE params END) as params FROM Table1
然后使用此视图进行转换。希望这有帮助。
答案 1 :(得分:0)
在查询的WHERE子句中使用XML列上的exist()。这会将结果限制为包含所需内容的XML内容的记录。
请参阅:http://technet.microsoft.com/en-us/library/ms189869.aspx
SELECT *
FROM table1
WHERE xmlColumn.exist('/Path/to/data') = 1;