如何查找仅包含 0 和任何其他数字的值,例如 000000001 或 0000010001 或 010101 或 0002 或 02020 或 0090 等?



我想在SQL中找到'默认类型值',当输入公司注册号的ID号时输入。我看到的一些值是0和1-9中的另一个数字的组合。我见过的例子有00000001、0000100、000000002、000001111、0000090009等。这些值的长度也不同。有没有一种方法来找到这些值没有硬编码?该值应至少包含一个0和一个或多个其他数字。

您希望所有字符串仅由零和另一个数字组成。也就是说,你想找到'0101',而不是'0102'。

为了做到这一点,首先删除所有的零。从剩余的字符串中删除等于其第一个字符的所有数字。这将导致一个空字符串或由额外的数字或字符组成的字符串。只选择结果为空的字符串。

select *
from mytable
where replace(replace(value, '0', ''), substring(replace(value, '0', ''), 1, 1), '') = '';

演示:https://dbfiddle.uk/?rdbms=sqlserver_2019&小提琴= c307bbbf21ceeae619a966e995c3a567

可以使用ISNUMERIC()函数

SELECT ISNUMERIC(0000004);

返回1

SELECT ISNUMERIC('A');

这将返回0

所以如果你想选择所有的列都是数字,你可以使用这个逻辑:

select *
from test
where ISNUMERIC(colA) = 1

这里是一个小的演示

或者您可以使用TRY_CAST()函数:

select *
from test
where try_cast(colA as int) is not null

备选方案:

SELECT value
FROM mytable
CROSS JOIN (
SELECT '1' AS num
UNION ALL
SELECT '2'
UNION ALL
SELECT '3'
UNION ALL
SELECT '4'
UNION ALL
SELECT '5'
UNION ALL
SELECT '6'
UNION ALL
SELECT '7'
UNION ALL
SELECT '8'
UNION ALL
SELECT '9'
) n
WHERE REPLACE(REPLACE(value, '0', ''), num, '') = ''
AND REPLACE(value, '0', '') <> ''
AND value LIKE '%0%'

相关内容

  • 没有找到相关文章

最新更新