Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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
Sql 将单个数据库字段拆分为多个字段_Sql_Ms Access_Vba - Fatal编程技术网

Sql 将单个数据库字段拆分为多个字段

Sql 将单个数据库字段拆分为多个字段,sql,ms-access,vba,Sql,Ms Access,Vba,以下是为拆分下表而编写的查询。第三列是后缀,此字段前面的列不会将-后缀从返回字段的末尾修剪掉。我附上了查询以及结果和问题的图片 SELECT Left([ADDRESS_ID],InStr([ADDRESS_ID],"-")-1) AS Abbreviation, Mid([ADDRESS_ID],InStr([ADDRESS_ID],"-")+1) AS CODE, Right([ADDRESS_ID],InStr([ADDRESS_ID],"-")) AS SUF

以下是为拆分下表而编写的查询。第三列是后缀,此字段前面的列不会将-后缀从返回字段的末尾修剪掉。我附上了查询以及结果和问题的图片

SELECT Left([ADDRESS_ID],InStr([ADDRESS_ID],"-")-1) AS Abbreviation,
       Mid([ADDRESS_ID],InStr([ADDRESS_ID],"-")+1) AS CODE,
       Right([ADDRESS_ID],InStr([ADDRESS_ID],"-")) AS SUFFIX,
       MDM_Address_Remote_Key.ADDRESS_ID
FROM MDM_Address_Remote_Key;
这三根柱子是分开的,看起来应该像第三根;但是,中间一列保留了末尾的后缀。如何解决这个问题

原因是mid函数需要3个参数:

Mid ( text, start_position, number_of_characters )
如果未指定最后一个参数,mid函数将返回起始位置后的所有字符,这将导致结果

尝试:


此表达式提取代码所需的子字符串:

Mid[地址ID]、InStr1[地址ID]、-1、InStrRev[地址ID]、-InStr1[地址ID]、-1作为代码 然而,这个表达式相当复杂,而您的其他字段表达式已经相当复杂,整个lotta函数都在进行中

如果要在Access会话中运行查询,可以使用利用VBA拆分函数的自定义函数

这样,您的查询就可以更简单、更清晰

选择SplitSegment[地址\ ID],-,0作为缩写, 拆分段[ADDRESS_ID],-,1作为代码, 拆分段[ADDRESS_ID],-,2作为后缀, MDM\u地址\u远程\u密钥。地址\u ID 来自MDM_地址_远程_密钥; 公共函数SplitSegmentByVal pSource作为变体_ ByVal pDelimter作为字符串_ ByVal pIndex与变体一样长 Dim varOut作为变体 varOut=Null 如果不是IsNullpSource,那么 varOut=SplitpSource,pDelimterpIndex 如果结束 SplitSegment=varOut 端函数
@先生:此外,您还应该使用InStrRev作为后缀部分。目前,只有运气第一,始终处于位置2,这部分工作。
Mid([ADDRESS_ID],InStr([ADDRESS_ID],"-")+1,InStrRev([ADDRESS_ID],"-")-(InStr([ADDRESS_ID],"-")+1)) AS CODE