Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在带有数字字段的SQL中使用LIKE条件?_Sql_Ms Access_Jet - Fatal编程技术网

如何在带有数字字段的SQL中使用LIKE条件?

如何在带有数字字段的SQL中使用LIKE条件?,sql,ms-access,jet,Sql,Ms Access,Jet,我使用这个查询来获取一些特定的数据:“选择*来自emp,其中emp_名称类似于's%'” emp_nam是字符字段,如何使用与数字字段相同的逻辑条件?比如: “从emp中选择*其中emp_id???” 其中emp_id是数字字段 谢谢,在emp\u id字段上使用cast或convert功能,您可以与like进行比较。不,您不能对数字字段使用like。 尝试使用或=,=,您不能对数字执行通配符,但是,如果确实需要,您可以将数字转换为varchar,然后执行通配符匹配 例如 在Access数据库引

我使用这个查询来获取一些特定的数据:“选择*来自emp,其中emp_名称类似于's%'”

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

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

其中emp_id是数字字段


谢谢,

emp\u id
字段上使用
cast
convert
功能,您可以与
like

进行比较。不,您不能对数字字段使用
like

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

例如


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

有关ANSI-92查询模式的详细信息,请参见Access2003帮助中的(Access2007中的ACE也适用于此,但由于某种原因,他们从Access2007帮助中删除了此主题)。如果在代码中执行此操作,则需要在VBA中使用OLE DB,例如ADO classic

对于
like
关键字…您不会发现太多。这是官方未记录的功能之一,这意味着它可能会从Access数据库引擎的未来版本中删除。就个人而言,我愿意冒这个风险,而不是像nec一样显式地为ANSI-89查询模式和ANSI-92查询模式编码验证规则和
检查约束的必要条件(参见下面的示例)。两者的编码都可以完成,但要做到正确更冗长、更棘手,即如果你弄错了,会有更大的直接风险

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

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

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

CHECK (emp_id NOT LIKE '%[^0-9]%')
编辑“Jet”标记现在已添加。需要重写上述
检查
约束,因为Access数据库引擎有自己的语法:将
^
字符替换为
。此外,要使其与ANSI-89查询模式和ANSI-92查询模式兼容,请使用相似关键字,即

CHECK (emp_id NOT ALIKE '%[!0-9]%')

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

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

还请注意,Access使用*而不是%作为通配符。请参阅:。

'%'通配符在MS-SQL server上对我有效。请参阅

询问
select*from MyTable,其中ID类似于“548%”
在MS-SQL Server 2008 R2上工作,并返回ID为54815485等的结果。ID列是
int
类型。

嗨,我在使用浮点时遇到问题,我不得不将两个tims cast(cast(EmpId作为bigint)转换为varchar(15))与“%903%”类似,希望有人能在FileMaker SQL中找到这一有用信息,您可以使用STRVAL函数将任何字段强制转换为字符串:

从emp中选择*,其中STRVAL(emp_id)如“1%”


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

如何在数字字段中列出所有包含ASCII 0的记录
使用CONCAT implic convert integer to string从emp WHERE STRVAL(someNumericField)中选择emp\u id,如“%”+CHR(0)+“%”


选择*FROM city WHERE CONCAT(id_city“”)如“%119%”

您想要实现什么?您是否寻找所有以例如7开头的id?这取决于您的DBMS引擎,但大多数都支持这一点。我使用的是MS Jet,其中未定义CONVERT varchar?这对Jet数据库不起作用,但类似的方法将起作用。使用cstr()哪些版本的Jet SQL支持convert(varchar…statement.CAST)和convert?我不知道Jet SQL,但通过在字符串中进行转换,您可以做到这一点。在发布一些答案(包括我的答案)后添加了“Jet”标记;它最初只是标记为“SQL”。FWIW Jet(现在是Access数据库引擎)确实有强制转换函数,例如CCURRENCY()将强制转换为货币。在ANSI-89查询模式下,Access仅在SQL代码中使用*作为通配符。请参阅我的答案。
select * from emp where emp_id & '' like '123*'