请在下面找到我的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%%%%%%%%%%%'
答案 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%%%%%%%%%%%'