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