设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 1313|回复: 11
打印 上一主题 下一主题

[查询] 提取查询条件中的字符 (有示例)楼下Henry D. Sy ,已解决

[复制链接]
跳转到指定楼层
1#
发表于 2009-2-23 22:29:12 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 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 ,已解决
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
12#
 楼主| 发表于 2009-2-25 18:44:50 | 只看该作者
我有95%的把握说你根本没去看帮助。

以下摘自 Microsoft Access 2003 Help

InStr 函数


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

语法

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

你的方法行不能,得出的是“# 错误”
请举个例
11#
发表于 2009-2-25 08:57:50 | 只看该作者
本帖最后由 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 .
10#
 楼主| 发表于 2009-2-24 23:27:48 | 只看该作者
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

==========
学习了,多谢赐教
9#
发表于 2009-2-24 23:21:15 | 只看该作者
  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;
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
8#
 楼主| 发表于 2009-2-24 23:08:22 | 只看该作者
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台
有两个“/”,提取不了
7#
发表于 2009-2-24 22:58:09 | 只看该作者
例,在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 .
6#
 楼主| 发表于 2009-2-24 22:46:10 | 只看该作者
3# Henry D. Sy
=========
行不通喔,是不是我的代码有问题,可以做个示例吗?
5#
发表于 2009-2-24 19:23:34 | 只看该作者
这个怎么用啊
4#
发表于 2009-2-24 17:13:04 | 只看该作者
好厉害的split(),更厉害的是Henry D. Sy
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-17 00:06 , Processed in 0.083649 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表