如何在SQL中使用LIKE条件和数字字段?

时间:2009-07-10 07:24:31

标签: sql ms-access jet

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

emp_nam是字符字段,如何在数字字段中使用相同的逻辑条件?类似的东西:

“选择*来自emp,其中emp_id ????

其中emp_id是数字字段。

谢谢,

10 个答案:

答案 0 :(得分:8)

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

例如

SELECT * FROM emp WHERE CONVERT(varchar(20), emp_id) LIKE '1%'

答案 1 :(得分:8)

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

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

另请注意,Access使用* not%作为通配符。请参阅:Like Operator (Microsoft Access SQL)

答案 2 :(得分:3)

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

如果您想在数字字段中搜索“以12开头”或类似这样的内容,那么您的设计将无法满足您的需求。

答案 3 :(得分:3)

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

有关ANSI-92查询模式的详细信息,请参阅Access2003帮助中的About ANSI SQL query mode (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]%')

答案 4 :(得分:2)

'%'外卡在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类型。

答案 5 :(得分:1)

cast字段上使用convertemp_id功能,您可以与like进行比较。

答案 6 :(得分:1)

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

SELECT * FROM city WHERE CONCAT(id_city,&#39;&#39;)LIKE&#39;%119%&#39;

答案 7 :(得分:0)

嗨我在使用浮动时遇到了麻烦我必须施放两个时间演员(演员(EmpId as bigint)和varchar(15))像&#39;%903%&#39;希望有人能找到这个有用的

答案 8 :(得分:0)

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

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

以下是在FileMaker中使用此功能的一个真实示例:

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

{{1}}

答案 9 :(得分: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 位数字)。