Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从select和数学操作中插入SQL_Sql_Database_Libreoffice Base - Fatal编程技术网

从select和数学操作中插入SQL

从select和数学操作中插入SQL,sql,database,libreoffice-base,Sql,Database,Libreoffice Base,我使用libreofficebase是因为我需要在Windows和OSX中使用相同的数据库 我有一个表,其中有数百个客户机ID作为主键,客户机名称作为字段。主键的长度为6个字符: CLxxxx 我希望能够插入一个新的客户端,并使用一个SQL语句,而不是VBA或PHP。就像使用自动编号一样 我想做的是: 1) 获取最高键,从中删除“CL”。例如,对于CL0344,我需要0344 2) 将1添加到最高密钥以获得新客户端的新密钥:0355 3) 在表中插入新客户机 第一点很容易通过以下方式实现: SE

我使用libreofficebase是因为我需要在Windows和OSX中使用相同的数据库

我有一个表,其中有数百个客户机ID作为主键,客户机名称作为字段。主键的长度为6个字符:

CLxxxx

我希望能够插入一个新的客户端,并使用一个SQL语句,而不是VBA或PHP。就像使用自动编号一样

我想做的是:

1) 获取最高键,从中删除“CL”。例如,对于CL0344,我需要0344

2) 将1添加到最高密钥以获得新客户端的新密钥:0355

3) 在表中插入新客户机

第一点很容易通过以下方式实现:

SELECT TOP 1 RIGHT(CLIENT_ID,4) AS LAST_RECORD FROM CLIENTS
ORDER BY CLIENT_ID DESC

但是,如何将1添加到此select的结果中,并使用相同的语句进行插入?

您可以使用此查询:-

 SELECT CAST(RIGHT(MAX(CLIENT_ID),4) AS INTEGER) + 1
 FROM CLIENTS;

为了添加1,需要将值转换为整数(RIGHT(CLIENT_ID,4)转换为整数)。然后你可以做+1。之后,返回到char(和concat with CL.)只是一个警告,CL9999会发生什么?我希望我永远不会有9999个客户可以跟随;)我的建议是将数据类型更改为整数(您不需要CL)。然后你可以有很多客户跟随!我之所以使用“CL”后缀,是因为我有3个表:Clients、Contacts、Contacts和orclients,它们连接两个表以实现多对多关系。客户使用“CL”后缀,联系人使用“CN”后缀,而在联系人中,我存储的密钥如下:CL0042CN0023,因此通过查看密钥,我可以返回客户或联系人。不要这样做。使用整数数据类型并将ContactsForClients存储为两列对(两个整数列)。为什么按一行结果排序?能否将整数值1添加到libreoffice中的字符值“1234”中?jarlh是对的,libre office似乎不喜欢查询中的order by。没有它的查询工作,我得到我的345。因此,目标1和2已经实现。如何使用单个查询来完成我的最新观点?在同一个表中插入和选择不能同时完成。你必须分开做。最好进行事务处理。别忘了转换回char,添加前导0,最后将“CL”放在第一位。有点棘手,因为您可以有1、2、3或4位数字。(对于整型列,这将非常容易…)对于整型列,我可以简单地设置为自动编号,以避免选择+数学运算部分。无论我在哪里看到它都买,最好避免使用自动编号。这就是我使用“CL”/“CN”后缀的原因