从sqlite中的文本字段中选择最大值

时间:2016-02-24 09:03:34

标签: c# winforms sqlite

我在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(),但不确定是否有办法删除任何字母,或者我是否必须为每个可能的部门设置条件?

1 个答案:

答案 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及其他方面的危险,有大量资源。