在称为“帐户”的表中,有一个帐户ID,该ID为13个字符长的字符串,其中前8位数字是拥有该帐户的用户ID。如何使用整数查询数据库并仅检查前8个字符?
我试图做这样的事情:
SELECT * FROM networthr.accounts WHERE CAST(SUBSTRING(account_id, 0, 8) as long) = 1;
但是它甚至不允许我运行此查询。
答案 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
但是,您确实应该在字符串之间进行比较。