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

C# 从sqlite中的文本字段中选择最大值,c#,winforms,sqlite,C#,Winforms,Sqlite,我在Windows CE设备上有一个SQLite数据库。它有一个名为product_code的列。此列中存储的值包含字母和字符。第一个字符取决于产品所在的部门,例如,对于Draw,它将是D,对于Spirits S。样本产品代码列条目将是S124或S09 在设备上,我有一个表单可以向数据库添加新产品。我希望表单能够生成下一个可用的产品代码。为此,我需要为特定部门选择产品代码的最大值(从组合框中选择) 我试过使用这个: stm = "SELECT MAX(CAST(product_code AS I

我在Windows CE设备上有一个SQLite数据库。它有一个名为product_code的列。此列中存储的值包含字母和字符。第一个字符取决于产品所在的部门,例如,对于Draw,它将是D,对于Spirits S。样本产品代码列条目将是S124或S09

在设备上,我有一个表单可以向数据库添加新产品。我希望表单能够生成下一个可用的产品代码。为此,我需要为特定部门选择产品代码的最大值(从组合框中选择)

我试过使用这个:

stm = "SELECT MAX(CAST(product_code AS Int)) AS maxPCode FROM product WHERE department_description = '" + cmbDeps.Text.ToString() + "';";
但我得到的回报是0。我也尝试过:

stm = "SELECT MAX(CAST(product_code AS Int)) AS maxPCode FROM product WHERE product_code NOT LIKE '%[a-z]%' AND ISNUMERIC(product_code) = 1 AND department_description = '" + cmbDeps.Text.ToString() + "';";

但似乎ISNUMERIC()不是SQLite中的函数?有没有其他办法来解决这个问题?我正在考虑可能使用replace(),但不确定是否有办法去除任何字母,或者是否必须为每个可能的部门设置条件?

由于
产品\u code
包含字母,因此无法将其转换为数值。
SUBSTR
函数允许您去掉第一个字符,因此要获得部门中的最高数字,您可以使用:

SELECT MAX(CAST(SUBSTR(product_code, 2) AS int)) AS maxPCode 
    FROM product 
    WHERE department_description = '" + cmbDeps.Text.ToString() + "'

小心SQL注入!有人可以在
cmbDepts
中输入部分查询并查看或删除您的数据!关于它的危险,有大量的资料提供。

由于
产品\u code
包含一个字母,因此不能将其转换为数值。
SUBSTR
函数允许您去掉第一个字符,因此要获得部门中的最高数字,您可以使用:

SELECT MAX(CAST(SUBSTR(product_code, 2) AS int)) AS maxPCode 
    FROM product 
    WHERE department_description = '" + cmbDeps.Text.ToString() + "'

小心SQL注入!有人可以在
cmbDepts
中输入部分查询并查看或删除您的数据!关于它的危险,在某某或其他地方有大量的资料。

我会尝试一下,但这是否也有效:
从DeviceLog中选择MAX(SUBSTR(Description,2))作为maxPCode,其中department_Description='“+cmbDeps.Text.ToString()+”
?你能解释一下数字2对应什么吗?这是否意味着SUBSTR从位置2开始,跳过第一个字母?Thanks@user3468334更新了我的答案,添加了强制转换,并将表/列名更改为您的值,抱歉:)是的,SUBSTR从1开始计数,因此
SUBSTR('AB',2)
返回'B'。它还可以与
部门描述
过滤器配合使用,甚至比类似
过滤器更好。工作非常完美!非常感谢。我注意到一些产品代码在数字前有两个字母,但我认为最好的处理方法是使用简单的if-else条件?它只适用于特定的情况departments@user3468334恐怕这也是我能想到的最好的方法了-类似于
product\u code REGEXP'^.[\d]
确定第二个位置是否为数字,我不知道SQLite中有任何
ISNUMERIC
函数(这并不意味着它不存在!),我会试试看,但这是否也能起作用:
从DeviceLog中选择MAX(SUBSTR(Description,2))作为maxPCode,其中department_Description='“+cmbDeps.Text.ToString()+”
?你能解释一下数字2对应什么吗?这是否意味着SUBSTR从位置2开始,跳过第一个字母?Thanks@user3468334更新了我的答案,添加了强制转换,并将表/列名更改为您的值,抱歉:)是的,SUBSTR从1开始计数,因此
SUBSTR('AB',2)
返回'B'。它还可以与
部门描述
过滤器配合使用,甚至比类似
过滤器更好。工作非常完美!非常感谢。我注意到一些产品代码在数字前有两个字母,但我认为最好的处理方法是使用简单的if-else条件?它只适用于特定的情况departments@user3468334恐怕这也是我能想到的最好的方法了-类似于
product\u code REGEXP'^.[\d]
确定第二个位置是否为数字,我不知道SQLite中有任何
ISNUMERIC
函数(这并不意味着它不存在!)