Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

用正则表达式提取字段第一个单词作为另一字段的更新查询

虎头  发表于:2017-12-29 18:39:50  
复制

由于是超级菜,不是很明白,请教一个问题:

有一个表,希望从 学名表的 Name_S 字段  提取字段的第一个单词到  Genus 字段

自己写了一个代码,总是出错,请老师提点一下。谢谢!

数据表如下:

学名表

SNum Name_S Name_C Genus
29 Bombycidendron vidalianum (Náves) Merr. et Rolfe 乔槿
30 Aristolochia sp. 马兜铃属一种
31 Rhinacanthus beesianus 滇灵枝草
32 Strobilanthes sp. 叉花草一种
33 Strobilanthes lamiifolia


希望得到的结果如下:

学名表

SNum Name_S Name_C Genus
29 Bombycidendron vidalianum (Náves) Merr. et Rolfe 乔槿 Bombycidendron
30 Aristolochia sp. 马兜铃属一种 Aristolochia
31 Rhinacanthus beesianus 滇灵枝草 Rhinacanthus
32 Strobilanthes sp. 叉花草一种 Strobilanthes
33 Strobilanthes lamiifolia 蒙自马蓝 Strobilanthes

写的更新查询如下:

UPDATE 学名表 SET 学名表.genus = AGenus([学名表].[Name_C]);

引用的AGenus函数

Function Agenus(sciname As String)

    '引用:Microsoft VBScript Regular Expressions 5.5
    '功能:返回学名字段的首个单词
    Dim regx As Object
Set regx = CreateObject("vbscript.regexp")
regx.Pattern = "^[a-zA-Z]+)"
regx.IgnoreCase = True
regx.Global = True
Agenus = regx.Execute(sciname)
End Function



 

Top
朱先生 发表于:2017-12-30 21:49:13

真接用更新查询就行了

UPDATE 学名表 INNER JOIN [SELECT 学名表.[NAME-S], 学名表.[NAME-C], Mid([NAME-S],1,InStr([NAME-S]," ")) AS GENUS
FROM 学名表]. AS A ON 学名表.[NAME-S] = A.[NAME-S] SET 学名表.GENUS = A.GENUS;

 



虎头 发表于:2018-01-01 01:38:15

UPDATE 学名表 INNER JOIN [SELECT 学名表.[NAME-S], 学名表.[NAME-C], Mid([NAME-S],1,InStr([NAME-S]," ")) AS GENUS

FROM 学名表]. AS A ON 学名表.[NAME-S] = A.[NAME-S] SET 学名表.GENUS = A.GENUS;

运行显示语法错误

朱先生 发表于:2018-01-01 16:11:46
会不会是版本问题,我用的是2003

虎头 发表于:2018-01-03 22:05:29
谢谢朱老师,我在别的网也看到类似的语法。但在我的这就是运行不了,不过学名表.[NAME-C], Mid([NAME-S],1,InStr([NAME-S]," ")生成数据得出结果也可以解决我的问题。

总记录:4篇  页次:1/1 9 1 :