我正在使用这个查询来获取一些特定的数据:“select * from emp where emp_name LIKE 's%'”;
emp_nam 是字符字段,如何使用与数字字段相同的逻辑条件?就像是:
“从 emp 中选择 * 其中 emp_id ????
其中 emp_id 是数字字段。
谢谢,
您不能对数字进行通配符,但是,如果您确实需要,可以将数字转换为 varchar,然后执行通配符匹配。
例如。
SELECT * FROM emp WHERE CONVERT(varchar(20), emp_id) LIKE '1%'
在 Access 中,您可以将数字字段与空字符串连接,以将其强制转换为可以使用 LIKE 进行比较的字符串:
select * from emp where emp_id & '' like '123*'
另请注意,Access 使用 * 而不是 % 作为通配符。请参阅:Like 运算符 (Microsoft Access SQL)。
不,您不能LIKE
用于数字字段。尝试使用<
,>
或=
, >=
, <=
;)
如果您想在数字字段中搜索“以 12 开头”之类的内容,那么您的设计不符合您的需求。
在 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]%')
'%' 通配符在 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
类型。
使用 CONCAT 隐式将整数转换为字符串
SELECT * FROM city WHERE CONCAT(id_city,'') LIKE '%119%'
在现场使用cast
或发挥作用,您可以与.convert
emp_id
like
嗨,我在使用浮点数时遇到了麻烦,我不得不像 '%903%' 一样投射两次 cast(cast(EmpId as bigint) as varchar(15)) 希望有人觉得这有帮助
在 FileMaker SQL 中,您可以使用 STRVAL 函数将任何字段转换为字符串:
SELECT * FROM emp WHERE STRVAL(emp_id) LIKE '1%'
这是在 FileMaker 中使用它的一个真实示例:
SELECT emp_id FROM emp WHERE STRVAL(someNumericField) LIKE '%'+CHR(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 位数字)。