我有一个 Varchar2 字段,它通常包含两个字母字符(例如ZH
, SZ
, AI
,...)。我们称之为FOO。
某些数据集保存A
或A1
-A9
到同一字段中。我需要选择所有行,除了那些。我使用该函数substr
将数字与A分开。到目前为止一切顺利,<
或者>
似乎无法与"number-string"一起正常工作。
如何在不将其转换为数字的情况下实现这一点?有更简单的解决方案吗?
我在互联网上没有找到任何东西,我自己尝试达到了极限。
到目前为止,这是我的WHERE 子句:
WHERE (substr(FOO, 0, 1) != 'A'
or (substr(FOO, 0, 1) = 'A' AND substr(FOO, 1, 1) > '9'));
它无限制地返回所有行。
我找到的唯一解决方案:
WHERE (FOO NOT IN ('A', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9'));
但是,如果在未来的某个地方会有A1
- ,这并不是最优的A50
。我必须在WHERE 子句中添加 51 个字符串。而且,由于查询是在源代码中,代码的可读性也会变差。
该解决方案应该适用于 ORACLE和SQL Server。提前致谢