Sql LIKE函数如何处理空字段?

Sql LIKE函数如何处理空字段?,sql,ms-access,Sql,Ms Access,如果字符串的结构与给定的示例类似,我想提取字符串的特定部分。 如果单独测试,每个元素都可以工作,但是如果我尝试下面的WHERE子句,它就不工作了。 有没有可能LIKE不能很好地处理空字段?还是我遗漏了什么? 我使用的是MS Access,因此LIKE中的通配符是“?” Select语句应从给定位置到下一个位置抓取行“endpoint1”的子字符串: WHERE语句应该只允许给定子字符串的两种不同格式 ?_????_?? ?_????_? SQL: 问题不在于类似的比较 如果字段为Null,则In

如果字符串的结构与给定的示例类似,我想提取字符串的特定部分。 如果单独测试,每个元素都可以工作,但是如果我尝试下面的WHERE子句,它就不工作了。 有没有可能LIKE不能很好地处理空字段?还是我遗漏了什么? 我使用的是MS Access,因此LIKE中的通配符是“?”

Select语句应从给定位置到下一个位置抓取行“endpoint1”的子字符串:

WHERE语句应该只允许给定子字符串的两种不同格式

?_????_?? ?_????_? SQL:


问题不在于类似的比较

如果字段为Null,则InStr将返回Null。如果InStr的结果为空,则中间错误,因为其位置参数必须为数字。可使用新西兰提供替代值:

InStrMidNzPLL.Endpoint1,7,10,


现在,若您的完整表达式返回Null,那个么将不会检索记录,因为与Null进行比较会返回Null。Null不为True,因此记录将被排除在False之外。

您能否澄清空的含义?MidPLL.Endpoint1,7,InStrMidPLL.Endpoint1,7,10,:-1的返回值有时看起来像Funktion,由于我对MS Access相当陌生,我不知道这是否称为empty请提供示例数据和所需结果。问题还不清楚。您的代码应该按照您的意愿执行。
SELECT
  Mid(PLL.Endpoint1,7,(InStr(Mid(PLL.Endpoint1,7,10),":")-1))
FROM
    [Test] AS PLL
WHERE 
    Mid(PLL.Endpoint1, 7, InStr(Mid(PLL.Endpoint1, 7, 10), ":") - 1) Like '?_????_??'
    OR Mid(PLL.Endpoint1, 7, InStr(Mid(PLL.Endpoint1, 7, 10), ":") - 1) Like '?_????_?'