mysql - SQL Server SELECT 以 Parameter 开头的行

标签 mysql sql sql-server

我有一个表,其中包含名为 NUMBERS 的列,该列的值为 1234、1235、1278、4567、5434 和 7890。我正在尝试编写一个过程来选择以数字 @NUMBER 开头的所有值。 我想它会是这样的:

 DECLARE @NUMBER as int 
 SET @NUMBER = 1
 SELECT * FROM table1 WHERE [NUMBER] LIKE (@NUMBER + '%')

但这给了我一个错误“将 varchar 值 '%' 转换为数据类型 int 时转换失败”。

如何才能做到这样,如果我输入 1 作为我的@NUMBER,它将返回以 1 开头的所有内容(即 1234、1235、1278)

最佳答案

您需要将数字转换为字符串,以便将 + 运算符理解为字符串连接(而不是加法):

SELECT *
FROM table1
WHERE cast([NUMBER] as varchar(255)) LIKE cast(@NUMBER as varchar(255)) + '%';

因为 like 无论如何都会执行隐式 cast(),因此您应该明确查询正在执行的操作。我也在第一部分中添加了类型转换。

注意:您还可以通过更改变量的声明来解决此问题:

 DECLARE @NUMBER as varchar(255);
 SET @NUMBER = '1';

 SELECT * FROM table1 WHERE [NUMBER] LIKE (@NUMBER + '%');

关于mysql - SQL Server SELECT 以 Parameter 开头的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24563814/

相关文章:

sql - 如何将星期(200851)转换为日期(2008-12-27)?

php - 在 foreach 循环中使用 SQL 结果

c++ - ODBC - 用 C++ 编写准备好的语句

sql - Doctrine 中两列的唯一值

sql-server - SQL Server 中的嵌套表

c# - 参数化查询被截断,参数丢失

MYSQL 查询优化 - 连接/联合与表查询

mysql - MariaDB MyRocks存储引擎如何获取表的存储空间

python - 查询产生不正确的结果

SQL 更新 - 多列