BIGINT 列上的 SQL Like/Contains

标签 sql sql-server tsql

我有一个 BIGINT 列,我想对其进行部分匹配。

例如@search = 1 应返回第一个数字为 1(1、11、100 等)的所有记录。基本上与 varchar LIKE 相同。

我已经尝试过:

DECLARE @search VARCHAR
SET @search = '1'

SET @search = '1%'

并使用:

SELECT
    id FROM table
WHERE
    CAST(id AS varchar) LIKE @search

@search 添加 % 没有帮助。有什么想法可以实现这一点吗?

编辑:这似乎是变量。如果我对 WHERE 子句中的字符串进行硬编码,我就会得到我正在寻找的结果。

SELECT id FROM table WHERE CAST(id AS VARCHAR) LIKE '14%'

这为我提供了 id 为 14*(14、140、1400 等)的所有记录。

最佳答案

试试这个:

DECLARE @search VARCHAR(10)
SET @search = '1'

SELECT id FROM table WHERE CAST(id AS VARCHAR(10)) LIKE @search + '%'

转换为 VARCHAR 时,应始终指定长度。如果您没有定义长度,SQL-Server 将为您分配一个长度。有时为 1,有时为 30。阅读 this了解更多信息。

关于BIGINT 列上的 SQL Like/Contains,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30904420/

相关文章:

c# - 在批处理结束时检测到不可提交的事务。事务被回滚

sql - 通过 PostgreSQL 中的 session 变量动态选择 View 选择语句

sql-server - 计算表中出现的次数

SQL Server 2008 字段函数 - 根据其他两个字段之间的关系返回 'ok' 或 'no'

sql-server - SQL Server 2000,获取 COUNT(DISTINCT ID) 的条件是我无法写入 WHERE?

c# - 使用 Group by 的 Linq to SQL

sql - 将 linq 语句转换为 sql

mysql - 我的 sql 查询不适用于数学运算符

sql - 如何授予数据库角色对架构的执行权限?我究竟做错了什么?

sql-server - 选择忽略狭窄时间的行