我在Windows CE设备上有一个SQLite数据库。它有一个名为product_code的列。存储在此列中的值包含字母和字符。第一个字符取决于产品所在的部门,例如对于Spirits S而言,它将是D,样本product_code列条目将是S124或S09。
在设备上,我有一个表单可以将新产品添加到数据库中。我希望表单能够生成下一个可用的产品代码。为此,我需要为特定部门(从组合框中选择)选择product_code的最大值。
我尝试过使用它:
function appendToStorage(name, data) {
var old = localStorage.getItem(name) || '[]';
var oldObject = JSON.parse(old) || [];
var merged = oldObject.concat(data);
localStorage.setItem(name, JSON.stringify(merged));
}
appendToStorage('ObjAry', objectIdArray);
但我得到0作为回报。我也尝试过:
stm = "SELECT MAX(CAST(product_code AS Int)) AS maxPCode FROM product WHERE department_description = '" + cmbDeps.Text.ToString() + "';";
但似乎ISNUMERIC()不是SQLite中的一个函数?有没有其他方法来解决这个问题?我在考虑可能使用replace(),但不确定是否有办法删除任何字母,或者我是否必须为每个可能的部门设置条件?
答案 0 :(得分:2)
由于product_code
包含一个字母,因此您无法将其强制转换为数字值。 SUBSTR
功能允许您剥离第一个字符,因此要获得部门中的最高编号,您可以使用:
SELECT MAX(CAST(SUBSTR(product_code, 2) AS int)) AS maxPCode
FROM product
WHERE department_description = '" + cmbDeps.Text.ToString() + "'
SQL注入的 WATCH OUT !有人可以在cmbDepts
中输入部分查询并查看或删除您的数据!关于其在SO及其他方面的危险,有大量资源。