我有一列(数据类型nvarchar(max)
,不是我的选择,遗留),对最终用户有各种不同的用途,具体取决于其他因素。
我试图缩小到该列中的某些特定数据,因为在一些样本(但具有高度代表性)数据中给出了前面的条款我注意到剩余的数据是 1、2、3、4 或日期
我最初添加了一些嵌套NULLIF
以及IS NOT NULL
AND NULLIF(NULLIF(NULLIF(NULLIF([ColumnName],'1'),'2'),'3'),'4') IS NOT NULL
1 作为字符串,因为在全局数据中有一些字符串,因此删除单括号会创建隐含转换为 int 的许多记录会失败。这使我的样本中的记录减少到 25 条,带有日期的记录和目标记录
然后我想我会添加一个ISDATE
来隔离这些记录
AND NULLIF(NULLIF(NULLIF(NULLIF(ISDATE([ColumnName]),'1'),'2'),'3'),'4') IS NOT NULL
然后返回 60k 左右的记录,这不是我预期的行为。
我运行了以下查询以查看这两个内联命令是否不兼容,但按预期返回
SELECT NULLIF(ISDATE('06/01/2022'),1)
返回NULL
。
SELECT NULLIF(ISDATE('06/01/2022'),'1')
以防它不喜欢字符串,但返回NULL
.
SELECT NULLIF(NULLIF(ISDATE('06/01/2022'),'1'),'2')
以防它不喜欢巢,但返回NULL
。
那么,为什么它不 NULL 表示日期的值,以及为什么它否定嵌套外部的其他 NULLIF 命令?