检查数字是否为数字列中的数字 SQL

问题描述 投票:0回答:3

我有一个表,其中有一列 DR。 ID# 的。我想要所有包含 2 的行。

名字 博士_id
534
埃里克 267
艾伦 309
史蒂文 125
加里 11

我一直在寻找子字符串的数字版本,但找不到。 唯一的其他想法是将值更改为字符串,然后进行子字符串搜索。还有别的办法吗?

mysql substring
3个回答
0
投票

我认为数字的固有特征是它适合数学运算。因此,如果您想根据数字的数字形式定义搜索条件,请确保可以通过对其执行数学计算来定义搜索条件。例如,如果我们想要

find a number which can be divided by 2
,我们可以使用
WHERE num mod 2 =0 and num<>0
.

但是在这种情况下,我不确定条件

find a number which has a 2 in it
可以通过数学运算来证明。因此,使用字符串函数(或 REGEXP)可能是唯一的选择。这里我建议使用
locate(substr,str)
函数,如果 substr 不在 str 中则返回 0,如果任何参数为 NULL,则返回 NULL:

select * from tb where locate('2',dr_id)>0;

0
投票

您必须使用字符串函数,其中数字将自动转换为字符串/字符。例如:

SELECT 123 LIKE "%2%" CONTAINS_2;
+------------+
| CONTAINS_2 |
+------------+
|          1 |
+------------+

SELECT LOCATE("3", 123) > 0 CONTAINS_3;
+------------+
| CONTAINS_3 |
+------------+
|          1 |
+------------+

SELECT INSTR(123, "1") > 0 CONTAINS_1;
+------------+
| CONTAINS_1 |
+------------+
|          1 |
+------------+

0
投票

假设您的 DR,您可以通过在 SQL 中使用 LIKE 运算符来实现此目的。 ID 号以字符串形式存储。您可以使用 % 通配符在字符串中搜索数字“2”。这是一个示例查询:

SELECT *
FROM your_table
WHERE dr_id LIKE '%2%';

此查询将返回 dr_id 列在字符串中任意位置包含数字“2”的所有行。

如果您的博士。 ID号存储为整数,您可以在执行LIKE操作之前使用CAST函数将它们转换为字符串:

重要

SELECT *
FROM your_table
WHERE CAST(dr_id AS VARCHAR) LIKE '%2%';

这会将 dr_id 列转换为字符串,然后您可以使用 LIKE 执行子字符串搜索。

根据 dr_id 列的数据类型选择适当的查询。

© www.soinside.com 2019 - 2024. All rights reserved.