如何在WHERE子句使用转换为long的子字符串的情况下编写sql查询?

时间:2019-03-10 00:24:59

标签: mysql sql

在称为“帐户”的表中,有一个帐户ID,该ID为13个字符长的字符串,其中前8位数字是拥有该帐户的用户ID。如何使用整数查询数据库并仅检查前8个字符?

我试图做这样的事情:

SELECT * FROM networthr.accounts WHERE CAST(SUBSTRING(account_id, 0, 8) as long) = 1;

但是它甚至不允许我运行此查询。

3 个答案:

答案 0 :(得分:1)

您的查询有2个问题:
1)SUBSTRING()的第二个参数应为1(索引基于1而不是基于0)
2)您应该将数据类型转换为UNSIGNED

SELECT * FROM networthr.accounts WHERE CAST(SUBSTRING(account_id, 1, 8) as unsigned ) = 1;

答案 1 :(得分:1)

这似乎是一个错误的设计。但是-如果void *table_lookup(const table *t) { ... //Here I want to call my other function. table_remove(t); ... } void table_remove(table *t) { ... } 像“ 00000001ABCDE”那样填充零,并且上面有一个索引,则一种有效的方法是

account_id

SELECT * FROM networthr.accounts WHERE account_id LIKE CONCAT(LPAD(?, 8, 0), '%') 替换为?或将其用作预备语句并绑定user_id作为参数。

对于user_id,它与

相同
user_id = 1

答案 2 :(得分:0)

您可以使用隐式转换:

WHERE LEFT(account_id, 8) + 0 = 1

但是,您确实应该在字符串之间进行比较。