10

我正在使用这个查询来获取一些特定的数据:“select * from emp where emp_name LIKE 's%'”;

emp_nam 是字符字段,如何使用与数字字段相同的逻辑条件?就像是:

“从 emp 中选择 * 其中 emp_id ????

其中 emp_id 是数字字段。

谢谢,

4

10 回答 10

9

您不能对数字进行通配符,但是,如果您确实需要,可以将数字转换为 varchar,然后执行通配符匹配。

例如。

SELECT * FROM emp WHERE CONVERT(varchar(20), emp_id) LIKE '1%'
于 2009-07-10T07:27:32.080 回答
8

在 Access 中,您可以将数字字段与空字符串连接,以将其强制转换为可以使用 LIKE 进行比较的字符串:

select * from emp where emp_id & '' like '123*'

另请注意,Access 使用 * 而不是 % 作为通配符。请参阅:Like 运算符 (Microsoft Access SQL)

于 2009-07-11T03:11:54.953 回答
4

不,您不能LIKE用于数字字段。尝试使用<,>=, >=, <=;)

如果您想在数字字段中搜索“以 12 开头”之类的内容,那么您的设计不符合您的需求。

于 2009-07-10T07:26:57.840 回答
3

在 Access 数据库引擎 SQL 语法中,要使用%通配符,您必须使用 ANSI-92 查询模式或使用ALIKE关键字代替LIKE关键字。

有关 ANSI-92 查询模式的详细信息,请参阅Access2003 帮助中的关于 ANSI SQL 查询模式 (MDB)(同样适用于 Access2007 中的 ACE,但出于某种原因,他们从 Access2007 帮助中删除了该主题)。如果您在代码中执行此操作,您将需要使用 OLE DB,例如 VBA 中的 ADO 经典。

对于ALIKE关键字......你不会找到太多。这是官方未记录的功能之一,这意味着它可能会从 Access 数据库引擎的未来修订版中删除。就我个人而言,我愿意为 ANSI-89 查询模式和 ANSI-92 查询模式显式编码,因为这是验证规则和CHECK约束所必需的(参见下面的示例)。两者的编码都可以完成,但要正确处理会更加冗长和棘手,即如果您弄错了,就会面临更大的直接风险。

这就是答案。现在对于“解决方案”...

显然,如果您需要对 emp_id 执行这​​种查询,那么该域是错误的,即它不应该是一个数字字段。

治愈疾病:更改架构以使其成为文本字段,添加域规则以确保其仅包含数字字符,例如

CHECK (emp_id NOT LIKE '%[^0-9]%')

编辑现在已添加“Jet”标签。上述CHECK约束需要重写,因为 Access 数据库引擎有自己的语法:将^字符替换为!. 此外,要使其与 ANSI-89 查询模式和 ANSI-92 查询模式兼容,请使用 ALIKE 关键字,即

CHECK (emp_id NOT ALIKE '%[!0-9]%')
于 2009-07-10T13:55:17.227 回答
3

'%' 通配符在 MS -SQL 服务器上为我工作。请参阅http://technet.microsoft.com/en-us/library/aa933232%28v=sql.80%29.aspx

该查询 select * from MyTable where ID like '548%'适用于 MS-SQL Server 2008 R2,并返回 ID 为 5481,5485 等的结果。ID 列是int类型。

于 2014-01-29T05:04:31.233 回答
2

使用 CONCAT 隐式将整数转换为字符串

SELECT * FROM city WHERE CONCAT(id_city,'') LIKE '%119%'

于 2015-07-25T16:43:49.633 回答
1

在现场使用cast或发挥作用,您可以与.convertemp_idlike

于 2009-07-10T07:26:33.987 回答
0

嗨,我在使用浮点数时遇到了麻烦,我不得不像 '%903%' 一样投射两次 cast(cast(EmpId as bigint) as varchar(15)) 希望有人觉得这有帮助

于 2014-07-01T05:04:58.273 回答
0

在 FileMaker SQL 中,您可以使用 STRVAL 函数将任何字段转换为字符串:

SELECT * FROM emp WHERE STRVAL(emp_id) LIKE '1%'


这是在 FileMaker 中使用它的一个真实示例:

如何列出在数字字段中包含 ASCII 0 的所有记录

SELECT emp_id FROM emp WHERE STRVAL(someNumericField) LIKE '%'+CHR(0)+'%'

于 2015-05-05T16:07:30.850 回答
0

在 Where 子句中编写一个数值表达式。例如:要选择以最后 2 位结尾的数字 Col1 作为 20,WHERE Column1-(Column1/100) = 20(除以 100 是整数除法)。选择 Col1 何时应以 50 开头,WHERE ( Col1 >= 500 and Col1 <= 509) OR ( Col1 >= 5000 and Col1 <= 5099)
OR ( Col1 >= 50000 and Col1 <= 50999) 等(取决于数字列宽)。或者: floor (log10 (abs (Col1))) + 1 返回数字中的位数。因此,以下可能是必需的子句。
WHERE Col1> 0 AND Col1 / ((floor (log10 (abs (x))) + 1 - 2) * 100)= 50 (-2 是获取 Col1 的前 2 位数字)。

于 2021-07-31T09:35:20.827 回答