我使用此查询来获取一些特定数据:“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 隐式将整数转换为字符串
从城市中选择 * WHERE CONCAT(id_city,'') LIKE '%119%'
在
cast
字段上使用 convert
或 emp_id
功能,您可以与 like
进行比较。
嗨,我在使用浮点数时遇到了麻烦,我不得不投射两次cast(cast(EmpId as bigint) as varchar(15)),如'%903%'希望有人觉得这有帮助
在 FileMaker SQL 中,您可以使用 STRVAL 函数将任何字段转换为字符串:
SELECT * FROM emp WHERE STRVAL(emp_id) LIKE '1%'
这是在 FileMaker 中使用此功能的真实示例:
SELECT emp_id FROM emp WHERE STRVAL(someNumericField) LIKE '%'+CHR(0)+'%'
这对我有用(MySql):
SELECT * FROM TABLA_UNO WHERE CAST(NRO_ID AS VARCHAR(12)) LIKE '%355%'; (NRO_ID 是整数数据类型)
从 ASIENTOS 中选择 * WHERE CAST(COTIZACION AS VARCHAR(12)) LIKE '%40.11%'; (COTIZACION 是十进制数据类型)
从 ASIENTOS 中选择 * WHERE CAST(FECHA AS VARCHAR(12)) LIKE '%2023%'; (FECHA 是日期)
在Where 子句中写入数值表达式。
例如:选择最后 2 位数字为 20 结尾的数字 Col1:
WHERE Column1-(Column1/100) = 20
(Divide by 100 is integer division).
选择 Col1 何时以 50 开头:
WHERE ( Col1 >= 500 and Col1 <= 509) OR ( Col1 >= 5000 and Col1 <= 5099)
OR ( Col1 >= 50000 and Col1 <= 50999) etc. (depending on the numeric column
width).
或者:
floor (log10 (abs (Col1))) + 1
返回数字中的位数。因此,以下可能是必需的条款。
WHERE Col1> 0 AND Col1 / ((floor (log10 (abs (x))) + 1 - 2) * 100)= 50
(-2是获取Col1的前2位)。