SQL使用Nullif与substring和charindex

时间:2017-07-27 15:31:02

标签: sql-server

请在下面找到我的SQL查询 - 尤其是第7行和第8行。我有一个名为COMMENTS的字段,可能(可能不包含)引用或日期。如果存在,我想将这些数据提取到“测试”中。或者'朱莉娅'分别 - 我做了这个,它的工作原理。然而,我磕磕绊绊的是,如果在COMMENTS字段中不存在Ref或date,我希望NONE出现。我从未使用过substring或charindex,所以我甚至不知道这是否可行。正如你所看到的,我已尝试过第8行,但这并不影响任何事情。如果你认为我可以通过其他方式实现这一点 - 请提供建议。 谢谢。

SELECT T0.[DocDueDate], 
T0.[CardCode], 
T0.[NumAtCard],  
T0.[DocNum], 
T1.[ItemCode], 
T1.[Dscription], 
substring(t0.comments, charindex('.1', t0.comments)-5,8 ) AS 'TEST',
NULLIF(SUBSTRING(T0.COMMENTS, CHARINDEX('REF', T0.COMMENTS),11),'NONE') AS 'Julia'

FROM ODLN T0  INNER JOIN DLN1 T1 ON T0.DocEntry = T1.DocEntry 

WHERE 
T0.[CardCode] = 'aa28' and  T0.[NumAtCard] Like 'SP%%%%%%%%%%%'

2 个答案:

答案 0 :(得分:0)

您可能想要使用ISNULL。目前还不清楚您对NULLIF的要求。试试这个。

SELECT T0.[DocDueDate], 
T0.[CardCode], 
T0.[NumAtCard],  
T0.[DocNum], 
T1.[ItemCode], 
T1.[Dscription], 
substring(t0.comments, charindex('.1', t0.comments)-5,8 ) AS 'TEST',
ISNULL(SUBSTRING(T0.COMMENTS, CHARINDEX('REF', T0.COMMENTS),11),'NONE') AS 'Julia'

FROM ODLN T0  INNER JOIN DLN1 T1 ON T0.DocEntry = T1.DocEntry 

WHERE 
T0.[CardCode] = 'aa28' and  T0.[NumAtCard] Like 'SP%%%%%%%%%%%'

答案 1 :(得分:0)

如果两个参数匹配,

NULLIF将返回NULL,因为第一个参数长度为11个字符,这种情况在您的情况下永远不会发生。

我会使用CASE语句来达到您想要的结果 - 看看这是否适合您 -

不清楚您的LIKE声明对所有这些%标志做了什么......

SELECT 
    T0.[DocDueDate], 
    T0.[CardCode], 
    T0.[NumAtCard],  
    T0.[DocNum], 
    T1.[ItemCode], 
    T1.[Dscription], 
    substring(t0.comments, charindex('.1', t0.comments)-5,8 ) AS 'TEST',
    NULLIF(SUBSTRING(T0.COMMENTS, CHARINDEX('REF', T0.COMMENTS),11),'NONE') AS 'Julia'

    ,CASE
        WHEN CHARINDEX('REF', T0.COMMENTS, 1) > 1 THEN REF
        ELSE 'NONE'
    END 

FROM ODLN T0  INNER JOIN DLN1 T1 ON T0.DocEntry = T1.DocEntry 

WHERE 
T0.[CardCode] = 'aa28' and  T0.[NumAtCard] Like 'SP%%%%%%%%%%%'