Office中国论坛/Access中国论坛

标题: 提取查询条件中的字符 (有示例)楼下Henry D. Sy ,已解决 [打印本页]

作者: luhao    时间: 2009-2-23 22:29
标题: 提取查询条件中的字符 (有示例)楼下Henry D. Sy ,已解决
本帖最后由 luhao 于 2009-2-24 23:30 编辑

例,在A表中                                     查询结果
=============                        ==============
生产订单                                          提取订单批号
91052/RM-139M/100个                     RM-139M
91055/RM-139RX/250个                   RM-139RX
93022A/RM-139/2300个                   RM-139
93022A/RM-139/450个                     RM-139
94072ABC/RM-139L/120个               RM-139L
=====================================
因每份订单中的批号前后字符数量不相同,
特征:
     订单中的批号用“/***/”做引记。
请问:如何做到以上的“查询结果”,
======================
楼下Henry D. Sy ,已解决
作者: ACMAIN_CHM    时间: 2009-2-24 00:06
Instr(),mid()用这两个函数组合一下



******************
*  一切皆有可能  *
******************

.
ACMAIN - Access论坛回贴准则(个人).
.

.
QQ群 48866293 / 12035577 / 7440532 / 13666209
http://forum.csdn.net/BList/OtherDatabase .
http://www.accessbbs.cn/bbs/index.php .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
http://www.office-cn.net .
.
http://www.office-cn.net/home/space.php?uid=141646 .
作者: Henry D. Sy    时间: 2009-2-24 06:17
split(生产订单,"/")(1)
作者: chaojianan    时间: 2009-2-24 17:13
好厉害的split(),更厉害的是Henry D. Sy
作者: 蓝天8390    时间: 2009-2-24 19:23
这个怎么用啊
作者: luhao    时间: 2009-2-24 22:46
3# Henry D. Sy
=========
行不通喔,是不是我的代码有问题,可以做个示例吗?
作者: ACMAIN_CHM    时间: 2009-2-24 22:58
例,在A表中                                     查询结果
=============                        ==============
生产订单                                          提取订单批号
91052/RM-139M/100个       ...
请问:如何做到以上的“查询结果”,
luhao 发表于 2009-2-23 22:29

3# Henry D. Sy  
=========
行不通喔,是不是我的代码有问题,可以做个示例吗?
luhao 发表于 2009-2-24 22:46


split 无法在SQL查询语句中直接使用。

用instr()分别找到"/"的位置i,j,然后用MID()函数取出

两个函数的用法,请参见ACCESS自带的帮助手册中的说明和例子。



******************
*  一切皆有可能  *
******************

.
ACMAIN - Access论坛回贴准则(个人).
.

.
QQ群 48866293 / 12035577 / 7440532 / 13666209
http://forum.csdn.net/BList/OtherDatabase .
http://www.accessbbs.cn/bbs/index.php .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
http://www.office-cn.net .
.
http://www.office-cn.net/home/space.php?uid=141646 .
作者: luhao    时间: 2009-2-24 23:08
split 无法在SQL查询语句中直接使用。

用instr()分别找到"/"的位置i,j,然后用MID()函数取出

两个函数的用法,请参见ACCESS自带的帮助手册中的说明和例子。


http://www.accessbbs.cn/bbs/images/d ...
ACMAIN_CHM 发表于 2009-2-24 22:58

==================
E93108A/RM-139X/400台
有两个“/”,提取不了
作者: Henry D. Sy    时间: 2009-2-24 23:21
  1. Public Function gString(FullString As String) As String
  2.     gString = Split(FullString, "/")(1)
  3. End Function
复制代码

  1. SELECT 表1.生产订单, gString([生产订单]) AS 提取订单批号
  2. FROM 表1;
复制代码

作者: luhao    时间: 2009-2-24 23:27
Public Function gString(FullString As String) As String
    gString = Split(FullString, "/")(1)
End Function


SELECT 表1.生产订单, gString([生产订单]) AS 提取订单批号
FROM 表1;

Henry D. Sy 发表于 2009-2-24 23:21

==========
学习了,多谢赐教
作者: ACMAIN_CHM    时间: 2009-2-25 08:57
本帖最后由 ACMAIN_CHM 于 2009-2-25 18:57 编辑
==================
E93108A/RM-139X/400台
有两个“/”,提取不了
luhao 发表于 2009-2-24 23:08


我有95%的把握说你根本没去看帮助。

以下摘自 Microsoft Access 2003 Help

InStr 函数


返回 Variant (Long) 值,该值指定一个字符串在另一个字符串中第一次出现时的位置。

语法

InStr([start, ]string1, string2[, compare])

InStr 函数语法具有以下参数:

部分
说明
start可选。数值表达式,用于设置每次搜索的开始位置。如果忽略,搜索将从第一个字符位置开始。如果 start 包含 Null,则会发生错误。如果指定了 compare,则必须有 start 参数。
string1必选。被搜索的字符串表达式。
string2必选。要寻找的字符串表达式。
compare可选。指定字符串比较类型。如果 compare 为 Null,则会发生错误。如果忽略 compare,则由 Option Compare 设置确定比较类型。请指定有效的 LCID (LocaleID),以便在比较中使用区域专用规则。



在查询中的一个常用准则就是
首先尽量使用 标准SQL 或jet-sql的标量函数 (比如用MAX,而不去用DMAX)
其次尽量使用 ACCESS内建函数。
当以上两种无法完成,或效率太差的时候才考虑自定义函数。

select mid(生产订单, instr(生产订单,"/")+1,instr(instr(生产订单,"/")+1,生产订单,"/")-instr(生产订单,"/")-1)
from table2  


-- 多了个引号,ACMAIN, 25-Feb-2009


******************
*  一切皆有可能  *
******************

.
ACMAIN - Access论坛回贴准则(个人).
.

.
QQ群 48866293 / 12035577 / 7440532 / 13666209
http://forum.csdn.net/BList/OtherDatabase .
http://www.accessbbs.cn/bbs/index.php .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
http://www.office-cn.net .
.
http://www.office-cn.net/home/space.php?uid=141646 .
作者: luhao    时间: 2009-2-25 18:44
我有95%的把握说你根本没去看帮助。

以下摘自 Microsoft Access 2003 Help

InStr 函数


返回 Variant (Long) 值,该值指定一个字符串在另一个字符串中第一次出现时的位置。

语法

InStr([st ...
ACMAIN_CHM 发表于 2009-2-25 08:57

你的方法行不能,得出的是“# 错误”
请举个例




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3