-
这个正则表达式是用于匹配特定的SQL语句,特别是SELECT语句,并且确保这个语句不包含INSERT、DELETE或UPDATE等可能修改数据的关键词。现在我会逐一解释这个正则表达式的各个部分:**^**:匹配字符串的开始。**(?i)**:这是一个模式修饰符,表示接下来的匹配应该是大小写不敏感的。但在你的正则中,SELECT和insert|delete|update等关键词已经是全部大写了,所以这个修饰符可能在这个特定场景中不是必需的,除非你还期望匹配到如select、Insert等大小写混合的关键词。**(\s*)**:匹配零个或多个空白字符(如空格、制表符、换行符等),并将这些字符捕获为一个组。**(\s+)**:再次匹配一个或多个空白字符,但这次它们是作为一个独立的捕获组。这意味着SELECT关键词之前和之后至少有一个空白字符。**select**:匹配字符串"select"(由于前面的(?i)修饰符,它也会匹配"Select"、"SELECT"等)。**(((?!(insert|delete|update)).)+)**:这是一个复杂的部分,我会逐步解释:**(?!(insert|delete|update))**:这是一个否定前瞻断言。它确保接下来的字符不是insert、delete或update中的任何一个。注意,由于(?i)修饰符,这个否定也会应用到大小写。**.**:匹配除换行符之外的任何单个字符。**((?!(insert|delete|update)).)+**:结合上面的部分,这个表达式会匹配一个或多个字符,但确保这些字符组成的字符串不是insert、delete或update。这个整体部分被捕获为一个组。**$**:匹配字符串的结束。综合上述分析,这个正则表达式将匹配以零个或多个空白字符开始,后跟一个或多个空白字符和SELECT(或大小写变体)关键词,再后跟一个或多个不是INSERT、DELETE或UPDATE(或大小写变体)的字符,并以字符串结束的字符串。例如,以下字符串将被匹配: SELECT column1 FROM table1但以下字符串将不会被匹配: UPDATE table1 SET column1 = 'value' SELECT INSERT column1 FROM table1注意:虽然这个正则表达式可以确保SELECT语句不包含INSERT、DELETE或UPDATE,但它不能确保整个SQL语句是有效的或安全的。对于复杂的SQL注入防护,建议使用更强大的工具或库。
-
密码强度正则表达式比如必须包含大写字母,小写字母和数字,至少8个字符等 需要一个密码强度正则表达式在用户注册时校验用户密码强度:密码至少8个字符,包括1个大写字母,1个小写字母和1个数字或特殊字符,例如#,?,!。网上搜索了一些解决方案分享给大家。 方案一 至少8-16个字符,至少1个大写字母,1个小写字母和1个数字,其他可以是任意字符: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[^]{8,16}$/ 或者: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[\s\S]{8,16}$/ 其中 [\s\S] 中的\s空白符,\S非空白符,所以[\s\S]是任意字符。也可以用 [\d\D]、[\w\W]来表示。 至少8个字符,至少1个大写字母,1个小写字母和1个数字,不能包含特殊字符(非数字字母): ^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$ 至少8个字符,至少1个字母,1个数字和1个特殊字符: ^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$ 至少8个字符,至少1个大写字母,1个小写字母和1个数字: ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$ 至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符: ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,} 最少8个最多十个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符: ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,10} 方案二 还有,你可以使用这个正则表达式: ^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$ 这个正则表达式将强制执行这些规则: 至少1个大写字母English letter,(?=.*?[A-Z]) 至少1个小写英文字母,(?=.*?[a-z]) 至少1位数字,(?=.*?[0-9]) 至少有1个特殊字符,(?=.*?[#?!@$%^&*-]) 最小8个长度.{8,} 方案三 正则表达式没有AND运算符,所以编写正则表达式与有效密码匹配是非常困难的,当有效性被某些东西和其他东西等定义时… 但是,正则表达式确实有1个OR运算符,所以只需应用DeMorgan的定理,并编写1个与无效密码相匹配的正则表达式: 任何少于8个字符或任何没有数字或任何没有大写字母或任何没有小写字母或任何没有特殊字符的任何东西。 所以:^(.{0,7}|[^0-9]*|[^A-Z]*|[^a-z]*|[a-zA-Z0-9]*)$,如果有什么匹配的话,这是1个无效的密码。 方案四 由于特殊字符仅限于键盘中的特殊字符,因此可用于任何特殊字符: ^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$ 这个正则表达式将强制执行这些规则: – 至少1个大写英文字母 – 至少1个小写英文字母 – 至少1位数字 – 至少1个特殊字符 – 最少8个长度 方案五 根据我的情况,我遇到了最受欢迎的答案。例如,我的验证失败,其中包含;或[等字符。我对 white-listing 我的特殊字符不感兴趣,所以我用[^\w\s]作为测试 – 简单地把非字符(包括数字)和非空格字符放在一起。总而言之,这是对我有用的 至少8字符 至少1数字字符 至少1小写字母 至少1大写字母 至少1特殊字符 /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,}$/ 简单演示涵盖各种情况 方案六 导入JavaScript文件jquery.validate.min.js。 您可以使用此方法: JavaScript 代码: $.validator.addMethod("pwcheck", function (value) { return /[\@\#\$\%\^\&\*\(\)\_\+\!]/.test(value) && /[a-z]/.test(value) && /[0-9]/.test(value) && /[A-Z]/.test(value) }); 至少1个大写英文字母 至少1个小写英文字母 至少1位数字 至少1个特殊字符 方案七 尝试这个: – 最少6个字符 – 至少有1个大写字符 – 至少1个小写字符 – 至少1个特殊字符 表达式: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&.])[A-Za-z\d$@$!%*?&.]{6, 20}/ 可选特殊字符: 至少1个特殊字符 至少1个数字 特殊字符是可选的 最少6个字符,最多16个字符 表达式: /^(?=.*\d)(?=.*[a-zA-Z]).{6,20}$/ 如果不需要最小和最大条件,则删除.{6, 16} – 6是最小字符数限制 – 20是最大字符限制 – ?=表示匹配表达式 原文链接:https://www.cnblogs.com/loong-hon/p/11288028.html
-
Oracle 中like常用但是其效率不是高。特别是使用%a%-----》全局扫描,没有利用到任何索引。情况可以的条件尽量下使用a%------》可以利用正序的索引。%a------》可以利用反序的索引(当然得已有反序的索引)。使用instr函数取代like查询,可提高效率,在海量数据中效果尤其明显。1.%a%方式:select * from pub_yh_bm twhere instr(t.chr_bmdm,'2')>0等份于:select * from pub_yh_bm twhere t.chr_bmdm like '%2%'2.%a方式:select * from pub_yh_bm twhere instr(t.chr_bmdm,'110101')=length(t.chr_bmdm)-length('110101')+1等份于:select * from pub_yh_bm twhere t.chr_bmdm like '%110101'3.a%方式:select * from pub_yh_bm twhere instr(t.chr_bmdm,'11010101')=1等份于:select * from pub_yh_bm twhere t.chr_bmdm like '11010101%'ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与INSTR的功能相似3,REGEXP_SUBSTR :与SUBSTR的功能相似4,REGEXP_REPLACE :与REPLACE的功能相似它们在用法上与Oracle SQL 函数LIKE、INSTR、SUBSTR 和REPLACE 用法相同,但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。POSIX 正则表达式由标准的元字符(metacharacters)所构成:'^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。'$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。'.' 匹配除换行符之外的任何单字符。'?' 匹配前面的子表达式零次或一次。'+' 匹配前面的子表达式一次或多次。'*' 匹配前面的子表达式零次或多次。'|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串。'( )' 标记一个子表达式的开始和结束位置。'[]' 标记一个中括号表达式。'{m,n}' 一个精确地出现次数范围,m=出现m次。\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。字符簇:[[:alpha:]] 任何字母。[[:digit:]] 任何数字。[[:alnum:]] 任何字母和数字。[[:space:]] 任何白字符。[[:upper:]] 任何大写字母。[[:lower:]] 任何小写字母。[[:punct:]] 任何标点符号。[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。各种操作符的运算优先级\转义符(), (?:), (?=), [] 圆括号和方括号*, +, ?, {n}, {n,}, {n,m} 限定符^, $, anymetacharacter 位置和顺序范例:--regexp_like--查询value中以1开头60结束的记录并且长度是7位select * from fzq where value like '1____60';select * from fzq where regexp_like(value,'1....60');--查询value中以1开头60结束的记录并且长度是7位并且全部是数字的记录。--使用like就不是很好实现了。select * from fzq where regexp_like(value,'1[0-9]{4}60');-- 也可以这样实现,使用字符集。select * from fzq where regexp_like(value,'1[[:digit:]]{4}60');-- 查询value中不是纯数字的记录select * from fzq where not regexp_like(value,'^[[:digit:]]+$');-- 查询value中不包含任何数字的记录。select * from fzq where regexp_like(value,'^[^[:digit:]]+$');--查询以12或者1b开头的记录.不区分大小写。select * from fzq where regexp_like(value,'^1[2b]','i');--查询以12或者1b开头的记录.区分大小写。select * from fzq where regexp_like(value,'^1[2B]');-- 查询数据中包含空白的记录。select * from fzq where regexp_like(value,'[[:space:]]');--查询所有包含小写字母或者数字的记录。select * from fzq where regexp_like(value,'^([a-z]+|[0-9]+)$');--查询任何包含标点符号的记录。select * from fzq where regexp_like(value,'[[:punct:]]');select * from Dba_Tables b where regexp_like(b.table_name,'^[[A-Z]]$') And b.owner='SSCP2'来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26015009/viewspace-730802/,如需转载,请注明出处,否则将追究法律责任。
-
正则表达式实现重叠匹配正则表达式与正则匹配正则表达式正则匹配正则表达式实现重叠匹配1234import regexstring = '100101010001'str_re = '101'print(regex.findall(str_re, string, overlapped=True))普通的re库匹配,只能匹配一个’101’。正则表达式与正则匹配正则表达式正则表达式可理解为对数据筛选的表达式,是有限个原子和元字符组成。原子:基本组成单位,每个表达式至少有一个原子普通字符组成原子 非打印字符组成原子(不打印在输出台的字符)\n:换行\t:tab退格符通用字符组成原子\w:匹配任意字母、数字、下划线\W:与\w相反\d:匹配任意十进制数\D:与\d相反\s:匹配任意空白字符,如空格、换行、缩进\S:与\s相反原子表组成原子一组原子组成一个表,由[]声明表内原子优先级相等,但内容只出现依次若原子表以 ^ 开头,则表示取反12345678910111213141516#普通字符组成原子pat1 = "abcd" #非打印字符组成原子pat2 = "\n" #通用字符做原子pat3 = "\w" #原子表组成原子pat4 = "py[abc]"#可以匹配pya,pyb,pyc,但匹配pyab等原子表重复出现的情况失败 #原子表开头带 ^ 表示取反pat5 = "py[^abc]"#第三个位置匹配除了a,b,c外的任意一个字符元字符:正则表达式中具有特殊含义的字符.匹配任意字符,除了换行符^匹配字符串开始的位置$匹配字符串结束的位置,当出现多组符合的匹配时,返回字符串最后的那组匹配*匹配 0,1,n 次前面的原子【贪婪模式:尽可能多的匹配】?匹配 0,1 次前面的原子【懒惰模式:精确匹配】+匹配 1,n 次前面的原子{ j }前面的原子出现 j 次{ j , }前面的原子至少出现 j 次{ j , k }前面的原子至少出现 j 次,至多出现 k 次i | j匹配 i 或 j ,若 i 与 j 同时出现,匹配 i( )组,限制这组数据的组合如()内所描述一样,只返回符合括号内描述的内容模式修正符即函数中 flag 位置的参数,在不改变正则表达式的情况下改变其含义,调整匹配结果。re.I匹配时忽略大小写re.M多行匹配re.L本地化识别匹配re.U根据unicon字符匹配,影响\w \Wre.S匹配包括换行符正则匹配正则表达式是对字符串进行模糊匹配,其中一个应用为正则匹配。正则匹配是python爬虫的一个使用技术,用于在爬取的文本信息中提取目标信息。正则匹配常用的函数:(调用正则表达式模块re)re.search(pat, str[, flag]):扫描字符串str,返回pat的位置(第一次成功匹配的),flag用于控制正则表达式的匹配方式1234import restr = 'python'pat = 'pytho[a-n]'print(re.search(pat, str))re.match(pat, str[, flag]):扫描字符串str开始的位置,返回pat的位置(第一次成功匹配的),flag用于控制正则表达式的匹配方式【若开始就不符合则结束,返回none】123456import restr_1 = 'hello world'str_2 = 'world hello'pat = 'world'print(re.match(pat, str_1))print(re.match(pat, str_2))re.complie(pat[, flag]):编译正则表达式pat,返回正则表达式对象findall(str[, pos[, endpos]]):匹配所有,用列表返回string中所有匹配到的子串【不止第一次】,pos和endpos可指定在string中的起始位置re.complie(pat).findall(str):全局匹配函数,匹配str中所有符合pat的子串,装入一个列表返回结果12345import restr = "hello world hello world hello world"pat = "hello"print(re.complie(pat).findall(str))print(re.complie(pat).findall(str, 5, 15))re.sub(pat, repl, str[, count[, flag]]):替换字符串中的匹配项【清洗数据】,可用count指定最大替换次数12345import restr = "400-823-823"pat = "-"#短横改空格,最大替换次数2str_new = re.sub(pat, " ", str, count=2)
-
本文主要讲两个常用场景: 场景1:文本中取出“金额数”; 场景2:登录某网站时,需要从手机接收的验证码信息中获取“验证码数字”。场景1原理: 一般文本中的金额数都有前缀或后缀,见下图,货币是后缀,符号是前缀。 (1)以“前缀”来匹配金额数的正则表达式可写成:(?<=¥|$|€|£|₣)\d+\.?\d* (2)以“后缀”来匹配金额数的正则表达式可写成:\d+\.?\d*(?=元|人民币|美元|欧元|英镑|法郎|日元) (3)前缀后缀都要考虑到,可用"|"或符号连接上面两个正则表达式:(?<=¥|$|€|£|₣)\d+\.?\d*|\d+\.?\d*(?=元|人民币|美元|欧元|英镑|法郎|日元)场景2原理: 一般手机验证码信息中的验证码数字之前定有“验证码”三个字。 例如:中国移动短信:“尊敬的客户,本次短信验证码为440562,您在畅由平台办理的中国移动12345678900手机号扣减移动1080积分兑换为畅由积分的业务,请于60秒内输入验证,请勿告知他人。中国移动不会以任何方式向你索取该验证码,如非本人操作,请核实确认。详询10086。【中国移动 积分商城】” (1)可根据“验证码”这三字来匹配验证码数字,正则表达式可写成:验证码.*?(\d+)注:Studio中主要用的控件如下:(1)查找文本中所有符合的金额数:“regex_findall-正则查找所有”控件;(2)查找文本中第一个符合的金额数:“regex_search-正则搜索”控件。Studio机器人脚本样例可见附件“正则匹配_金额or验证码.zip”。
-
函数名函数说明样例返回说明兼容对象语言位置ADD_MONTHS2(p1,p2) 当前日期 P1 增加 p2 个月的月末测试案例: select ADD_MONTHS2('2018-04-22',2); 输出: 20180630dateTDC语言https://bbs.huaweicloud.com/forum/thread-173862-1-1.htmlADD_MONTHS3(p1,p2)当前日期 P1 增加 p2 个月的月末测试案例: select ADD_MONTHS3(CAST('20180502' AS DATE FORMAT 'YYYYMMDD'),3)输出: 20180831dateTDC语言 DPT_MOB12(p1,p2)计算变量VAR514测试案例:select DPT_MOB12('1010101',30);输出: 1intergerTDC语言 edit_distance_similarity(p1,p2)比较两个字符串的相似度测试案例:select edit_distance_similarity('河北沧州东朔股份有限公司','河北沧州东朔股份有限公司')输出: 100select edit_distance_similarity('河北沧州东朔股份有限公司','沧州东朔房地产开发又发公司')输出: 50intergerORACLEC语言 max_col(p1,p2)计算浮点数最大值测试案例:select max_col(3.3,2.2);输出: 3.30floatTDC语言 min_col(p1,p2)计算浮点数最小值测试案例:select min_col(3.3,2.2);输出: 2.20floatTDC语言 month_between(p1,p2)间隔月份测试案例:select month_between(CAST('20180422' AS DATE FORMAT 'YYYYMMDD'),CAST('20181202' AS DATE FORMAT 'YYYYMMDD'))输出: 7intergerTDC语言 month_between1(p1,p2) P1(YYYYMM)-P2(YYYYMM)的月份数测试案例:select month1_between(CAST('20180422' AS DATE FORMAT 'YYYYMMDD'),CAST('20181202' AS DATE FORMAT 'YYYYMMDD'))输出: -8intergerTDC语言 month_between1(p1,p2) P1(YYYYMM)-P2(YYYYMM)的月份数测试案例:select month_between(CAST('20180422' AS DATE FORMAT 'YYYYMMDD'),CAST('20181202' AS DATE FORMAT 'YYYYMMDD'))输出: 7intergeroracleC语言 specialdata(inputdata varchar,inputtype varchar)根据获取的时间类型,获取对应的时间本月初:specialdate('20190806',11),返回时间:20190801本月末:specialdate('20190806',12),返回时间:20190831上月初:specialdate('20190806',13),返回时间:20190701上月末:specialdate('20190806',14),返回时间:201907031本季初:specialdate('20190806',21),返回时间:20190701本季末:specialdate('20190806',22),返回时间:20190930上季初:specialdate('20190806',23),返回时间:20190301上季末:specialdate('20190806',44),返回时间:20190630本年初:specialdate('20190806',31),返回时间:20190101本年末:specialdate('20190806',32),返回时间:201901231上年初:specialdate('20190806',33),返回时间:20180101上年末:specialdate('20190806',34);返回时间:201801230dateTDplsql substring_index(str,delim,count)按关键字截取字符串 例:select substring_index('blog.jb51.net','.', 2) as abstract from my_content_t结果:blog.jb51 textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173882-1-1.htmlchar2hexint(text)GBK字符集下的字符的16进制select char2hexint('1中2文'); char2hexint -------------- 31D6D032CEC4textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173886-1-1.htmlchars(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select chars('1中2文'); chars------- 6integerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173892-1-1.htmldaynumber_of_calendar(date)输入日期与'1900-01-01'相差的天数select daynumber_of_calendar(current_date); daynumber_of_calendar----------------------- 44508integerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173897daynumber_of_month(date)一个月的第几天select daynumber_of_month(date '2021-11-09'); daynumber_of_month-------------------- 9integerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173900-1-1.htmldaynumber_of_week(date)一个周的第几天,在td中,周日为1,周六为7select daynumber_of_week(date '2021-11-07'); daynumber_of_week------------------- 1integerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173909-1-1.htmldaynumber_of_year(date)一个年的第几天select daynumber_of_year(date '2021-11-06'); daynumber_of_year------------------- 310integerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173911-1-1.htmllpad(character varying,integer,character varying)左边填充,td中1个中文占2个字符,导致td与dws结果不一样select public.lpad('1中2文',10,'#'); lpad ------------ ####1中2文textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-174007-1-1.htmlmonthnumber_of_year(date)一个年的第几月select monthnumber_of_year(date '2021-11-10'); monthnumber_of_year--------------------- 11integerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173927-1-1.htmlmonths_between(date,date)日期相差月份数量select months_between(date '2021-11-10',date '2021-09-20'); months_between---------------- 1.6774numericTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173935&page=1&authorid=&replytype=&extra=#pid1396442months_between_double(date,date)日期相差月份数量(中间函数),一般不使用,因此c函数只能返回double类型,但一般函数返回integer。 double precisionTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173936numtoyminterval(integer,character varying)数字转interval,与td保持一致,第二个参数输入只能是YEAR或者MONTHselect numtoyminterval(100, 'MONTH'); numtoyminterval----------------- 8 years 4 monsintervalTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173872-1-1.htmloadd_months(date,integer)获取多个月以后(以前)的同样的日期。若是月末取月末(区别与add_months)select oadd_months(date '2020-02-29',-1); oadd_months------------- 2020-01-31select oadd_months(date '2020-02-28',1); oadd_months------------- 2020-03-28dateTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173876quarternumber_of_year(date)一个年的第几个季度select quarternumber_of_year(date '2021-10-01'); quarternumber_of_year----------------------- 4intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173879-1-1.htmlregexp_instr(text,text,integer)第一个参数:输入的字符串第二个参数:正则表达式第三个参数:匹配的其实位置通过正则表达式搜索字符位置,需考虑中文字符select regexp_instr('中1文2','\d',1); regexp_instr-------------- 3intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173885-1-1.htmlregexp_similar(text,text,text)第一个参数:输入的字符串第二个参数:正则表达式第三个参数:是否区分大小写等,输入i为不区分大小写,c为区分大小写函数功能:判断输入的字符串是否满足输入的正则表达式select regexp_similar('12345678902','\d+','c'); regexp_similar---------------- 1(1 row)cmbgdw=> select regexp_similar('1234567890w','\d+','c'); regexp_similar---------------- 0select regexp_similar('1234567890W','\d+[a-z]','c'); regexp_similar---------------- 0(1 row)cmbgdw=> select regexp_similar('1234567890W','\d+[a-z]','i'); regexp_similar---------------- 1intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173888-1-1.htmlregexp_substr(text,text,integer,integer,text)第一个参数:输入的字符串第二个参数:正则表达式第三个参数:搜索起始位置第四个参数:取匹配到的第几个组字符第五个参数:是否区分大小写等,输入i为不区分大小写,c为区分大小写,默认为c函数功能:通过正则表达式截取字符cmbgdw=> select regexp_substr('1中2文','\d',1,1,'i'); regexp_substr--------------- 1(1 row)cmbgdw=> select regexp_substr('1中2文','\d',1,2,'i'); regexp_substr--------------- 2(1 row)textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173890-1-1.htmlregexp_substr(text,text,text)第一个参数:输入的字符串第二个参数:正则表达式第三个参数:是否区分大小写等作用同上面的regexp_substr(text,text,1,1,text)select regexp_substr('1中2文','\d','i'); regexp_substr--------------- 1textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173895-1-1.htmlround2(numeric,integer)td无该函数,用于适配td的奇进偶舍的进制,作用:对于小数需要进行round操作时,0.5这样的需要判断进位的前一位数字,若是奇数,则进一位,若是偶数,则舍弃 select round2(1.25,1); round2-------- 1.2(1 row)cmbgdw=> select round2(1.35,1); round2-------- 1.4numericTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173896-1-1.htmlstrtok(text,text,integer)适配td的strtok函数,作用是按指定分隔符切割字符串。第一个参数:输入的字符第二个参数:分隔符第三个参数:取第几位select strtok('a,b,c,d',',',3); strtok-------- ctextTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173899-1-1.htmltd_char(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select td_char('1中2文'); td_char--------- 6intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173902-1-1.htmltd_char_length(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select td_char_length('1中2文'); td_char_length---------------- 6intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173904-1-1.htmltd_character(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select td_character('1中2文'); td_character-------------- 6intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173983td_character_length(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select td_character_length('1中2文'); td_character_length--------------------- 6intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173984td_day_of_calendar(date)输入日期与'1900-01-01'相差的天数select td_day_of_calendar(date '2021-11-10'); td_day_of_calendar-------------------- 44509intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173986td_day_of_month(date)一个月的第几天select td_day_of_month(date '2021-11-10'); td_day_of_month----------------- 10intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173987td_day_of_month(timestamp without time zone)一个月的第几天select td_day_of_month( '2021-11-10 10:01:01'); td_day_of_month----------------- 10intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173989td_day_of_week(date)一个周的第几天,在td中,周日为1,周六为7select td_day_of_week(date '2021-11-10'); td_day_of_week---------------- 4intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173993td_day_of_week(timestamp without time zone)一个周的第几天,在td中,周日为1,周六为7select td_day_of_week( '2021-11-10 10:01:01'); td_day_of_week---------------- 4intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173994td_day_of_year(date)一个年的第几天select td_day_of_year(date '2021-11-10'); td_day_of_year---------------- 314intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173996td_day_of_year(timestamp without time zone)一个年的第几天select td_day_of_year( '2021-11-10 10:10:10'); td_day_of_year---------------- 314intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173997td_instr(text,text,integer)返回某个字符的位置,第三个参数是指定搜索位置,类似instr,考虑td与dws字符集影响而新增select td_instr('1中2文','2',1); td_instr---------- 4(1 row)select instr('1中2文','2',1); instr------- 3(1 row)textTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=174000td_left(text,integer)与left类似,考虑td与dws字符集影响而新增,若中间截取了中文,返回固定的\x0F字符select td_left('1中2文',3); td_left--------- 1中select td_left('1中2文',2); td_left--------- 1\x0Fselect left('1中2文',2); left------ 1中textTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=174003td_length(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select td_length('1中2文'); td_length----------- 6(1 row)cmbgdw=> select length('1中2文'); length-------- 4intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=174009td_month_begin(date)获取当天月初日期select td_month_begin(date '2021-11-10'); td_month_begin---------------- 2021-11-01dateTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173937-1-1.htmltd_month_begin(timestamp without time zone) dateTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173939-1-1.htmltd_month_end(date)获取当天月末日期select td_month_end(date '2021-11-10'); td_month_end-------------- 2021-11-30dateTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173941-1-1.htmltd_month_end(timestamp without time zone) dateTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173942-1-1.htmltd_quarter_of_year(date)一个年的第几个季度select td_quarter_of_year(date '2021-10-01') ; td_quarter_of_year-------------------- 4intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173943-1-1.htmltd_regexp_replace(text,text,text)因dws也有regexp_replace,此函数区别区别于dws,因此命名为td_regexp_replace第一个参数:输入的字符串第二个参数:输入的正则表达式第三个参数:匹配后替换的字符select td_regexp_replace('1a2b3c','\d','w'); td_regexp_replace------------------- wawbwctextTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173944-1-1.htmltd_regexp_replace(text,text,text,integer,integer,text)第一个参数:输入的字符串第二个参数:正则表达式第三个参数:匹配到替换的字符第四个参数:搜索起始位置第五个参数:取匹配到的第几个组字符,输入0,则对所有匹配的都做替换,只接受0和1第六个参数:是否区分大小写等,输入i为不区分大小写,c为区分大小写,默认为c函数功能:通过正则表达式替换字符select td_regexp_replace('1a2b3c','\d','w',2,1,'i'); td_regexp_replace------------------- 1awb3c(1 row)cmbgdw=> select td_regexp_replace('1a2b3c','\d','w',2,0,'i'); td_regexp_replace------------------- 1awbwctextTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173945-1-1.htmltd_right(text,integer)与right类似,考虑td与dws字符集影响而新增,若中间截取了中文,返回固定的\x0F字符select right('1中2文',2); right------- 2文(1 row)cmbgdw=> select td_right('1中2文',2); td_right---------- 文textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173946-1-1.htmltd_substr(text,integer)与substr类似,考虑td与dws字符集影响而新增,若中间截取了中文,返回固定的\x0F字符select td_substr('1中2文',4); td_substr----------- 2文textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173954-1-1.htmltd_substr(text,integer,integer)select td_substr('1中2文',1,3); td_substr----------- 1中textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173959-1-1.htmltrunc(date,character varying)获取某些类型的日期select trunc(date '2021-11-10','iw'); trunc ------------ 2021-11-08dateTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173875-1-1.htmlweeknumber_of_calendar(date)输入日期与'1900-01-01'相差的周数select weeknumber_of_calendar(date '2021-11-10'); weeknumber_of_calendar------------------------ 6358intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173877-1-1.htmlweeknumber_of_year(date)当年的周数,考虑td的一周开始是周日select weeknumber_of_year(date '2021-11-10'); weeknumber_of_year-------------------- 45intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173883-1-1.htmlyearnumber_of_year(date)当年的年数select yearnumber_of_year(date '2021-11-10'); yearnumber_of_year-------------------- 2021intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173887-1-1.htmlzeroifnull(anyelement)如果输入是null值,则返回0select zeroifnull(null); zeroifnull------------ 0cmbgdw=> create temp table mytbl(col int);cmbgdw=> drop table mytbl;DROP TABLEcmbgdw=> create temp table mytbl(col int);NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'col' as the distribution column by default.HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.CREATE TABLEcmbgdw=> insert into mytbl select null;INSERT 0 1cmbgdw=> select zeroifnull(col) from mytbl; zeroifnull------------ 0analyelementTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173891-1-1.htmlzeroifnull(unknown) intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173891-1-1.html
-
函数名函数说明样例返回说明兼容对象语言位置ADD_MONTHS2(p1,p2) 当前日期 P1 增加 p2 个月的月末测试案例: select ADD_MONTHS2('2018-04-22',2); 输出: 20180630dateTDC语言https://bbs.huaweicloud.com/forum/thread-173862-1-1.htmlADD_MONTHS3(p1,p2)当前日期 P1 增加 p2 个月的月末测试案例: select ADD_MONTHS3(CAST('20180502' AS DATE FORMAT 'YYYYMMDD'),3)输出: 20180831dateTDC语言 DPT_MOB12(p1,p2)计算变量VAR514测试案例:select DPT_MOB12('1010101',30);输出: 1intergerTDC语言 edit_distance_similarity(p1,p2)比较两个字符串的相似度测试案例:select edit_distance_similarity('河北沧州东朔股份有限公司','河北沧州东朔股份有限公司')输出: 100select edit_distance_similarity('河北沧州东朔股份有限公司','沧州东朔房地产开发又发公司')输出: 50intergerORACLEC语言 max_col(p1,p2)计算浮点数最大值测试案例:select max_col(3.3,2.2);输出: 3.30floatTDC语言 min_col(p1,p2)计算浮点数最小值测试案例:select min_col(3.3,2.2);输出: 2.20floatTDC语言 month_between(p1,p2)间隔月份测试案例:select month_between(CAST('20180422' AS DATE FORMAT 'YYYYMMDD'),CAST('20181202' AS DATE FORMAT 'YYYYMMDD'))输出: 7intergerTDC语言 month_between1(p1,p2) P1(YYYYMM)-P2(YYYYMM)的月份数测试案例:select month1_between(CAST('20180422' AS DATE FORMAT 'YYYYMMDD'),CAST('20181202' AS DATE FORMAT 'YYYYMMDD'))输出: -8intergerTDC语言 month_between1(p1,p2) P1(YYYYMM)-P2(YYYYMM)的月份数测试案例:select month_between(CAST('20180422' AS DATE FORMAT 'YYYYMMDD'),CAST('20181202' AS DATE FORMAT 'YYYYMMDD'))输出: 7intergeroracleC语言 specialdata(inputdata varchar,inputtype varchar)根据获取的时间类型,获取对应的时间本月初:specialdate('20190806',11),返回时间:20190801本月末:specialdate('20190806',12),返回时间:20190831上月初:specialdate('20190806',13),返回时间:20190701上月末:specialdate('20190806',14),返回时间:201907031本季初:specialdate('20190806',21),返回时间:20190701本季末:specialdate('20190806',22),返回时间:20190930上季初:specialdate('20190806',23),返回时间:20190301上季末:specialdate('20190806',44),返回时间:20190630本年初:specialdate('20190806',31),返回时间:20190101本年末:specialdate('20190806',32),返回时间:201901231上年初:specialdate('20190806',33),返回时间:20180101上年末:specialdate('20190806',34);返回时间:201801230dateTDplsql substring_index(str,delim,count)按关键字截取字符串 例:select substring_index('blog.jb51.net','.', 2) as abstract from my_content_t结果:blog.jb51 textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173882-1-1.htmlchar2hexint(text)GBK字符集下的字符的16进制select char2hexint('1中2文'); char2hexint -------------- 31D6D032CEC4textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173886-1-1.htmlchars(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select chars('1中2文'); chars------- 6integerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173892-1-1.htmldaynumber_of_calendar(date)输入日期与'1900-01-01'相差的天数select daynumber_of_calendar(current_date); daynumber_of_calendar----------------------- 44508integerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173897daynumber_of_month(date)一个月的第几天select daynumber_of_month(date '2021-11-09'); daynumber_of_month-------------------- 9integerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173900-1-1.htmldaynumber_of_week(date)一个周的第几天,在td中,周日为1,周六为7select daynumber_of_week(date '2021-11-07'); daynumber_of_week------------------- 1integerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173909-1-1.htmldaynumber_of_year(date)一个年的第几天select daynumber_of_year(date '2021-11-06'); daynumber_of_year------------------- 310integerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173911-1-1.htmllpad(character varying,integer,character varying)左边填充,td中1个中文占2个字符,导致td与dws结果不一样select public.lpad('1中2文',10,'#'); lpad ------------ ####1中2文textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-174007-1-1.htmlmonthnumber_of_year(date)一个年的第几月select monthnumber_of_year(date '2021-11-10'); monthnumber_of_year--------------------- 11integerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173927-1-1.htmlmonths_between(date,date)日期相差月份数量select months_between(date '2021-11-10',date '2021-09-20'); months_between---------------- 1.6774numericTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173935&page=1&authorid=&replytype=&extra=#pid1396442months_between_double(date,date)日期相差月份数量(中间函数),一般不使用,因此c函数只能返回double类型,但一般函数返回integer。 double precisionTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173936numtoyminterval(integer,character varying)数字转interval,与td保持一致,第二个参数输入只能是YEAR或者MONTHselect numtoyminterval(100, 'MONTH'); numtoyminterval----------------- 8 years 4 monsintervalTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173872-1-1.htmloadd_months(date,integer)获取多个月以后(以前)的同样的日期。若是月末取月末(区别与add_months)select oadd_months(date '2020-02-29',-1); oadd_months------------- 2020-01-31select oadd_months(date '2020-02-28',1); oadd_months------------- 2020-03-28dateTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173876quarternumber_of_year(date)一个年的第几个季度select quarternumber_of_year(date '2021-10-01'); quarternumber_of_year----------------------- 4intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173879-1-1.htmlregexp_instr(text,text,integer)第一个参数:输入的字符串第二个参数:正则表达式第三个参数:匹配的其实位置通过正则表达式搜索字符位置,需考虑中文字符select regexp_instr('中1文2','\d',1); regexp_instr-------------- 3intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173885-1-1.htmlregexp_similar(text,text,text)第一个参数:输入的字符串第二个参数:正则表达式第三个参数:是否区分大小写等,输入i为不区分大小写,c为区分大小写函数功能:判断输入的字符串是否满足输入的正则表达式select regexp_similar('12345678902','\d+','c'); regexp_similar---------------- 1(1 row)cmbgdw=> select regexp_similar('1234567890w','\d+','c'); regexp_similar---------------- 0select regexp_similar('1234567890W','\d+[a-z]','c'); regexp_similar---------------- 0(1 row)cmbgdw=> select regexp_similar('1234567890W','\d+[a-z]','i'); regexp_similar---------------- 1intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173888-1-1.htmlregexp_substr(text,text,integer,integer,text)第一个参数:输入的字符串第二个参数:正则表达式第三个参数:搜索起始位置第四个参数:取匹配到的第几个组字符第五个参数:是否区分大小写等,输入i为不区分大小写,c为区分大小写,默认为c函数功能:通过正则表达式截取字符cmbgdw=> select regexp_substr('1中2文','\d',1,1,'i'); regexp_substr--------------- 1(1 row)cmbgdw=> select regexp_substr('1中2文','\d',1,2,'i'); regexp_substr--------------- 2(1 row)textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173890-1-1.htmlregexp_substr(text,text,text)第一个参数:输入的字符串第二个参数:正则表达式第三个参数:是否区分大小写等作用同上面的regexp_substr(text,text,1,1,text)select regexp_substr('1中2文','\d','i'); regexp_substr--------------- 1textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173895-1-1.htmlround2(numeric,integer)td无该函数,用于适配td的奇进偶舍的进制,作用:对于小数需要进行round操作时,0.5这样的需要判断进位的前一位数字,若是奇数,则进一位,若是偶数,则舍弃 select round2(1.25,1); round2-------- 1.2(1 row)cmbgdw=> select round2(1.35,1); round2-------- 1.4numericTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173896-1-1.htmlstrtok(text,text,integer)适配td的strtok函数,作用是按指定分隔符切割字符串。第一个参数:输入的字符第二个参数:分隔符第三个参数:取第几位select strtok('a,b,c,d',',',3); strtok-------- ctextTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173899-1-1.htmltd_char(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select td_char('1中2文'); td_char--------- 6intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173902-1-1.htmltd_char_length(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select td_char_length('1中2文'); td_char_length---------------- 6intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173904-1-1.htmltd_character(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select td_character('1中2文'); td_character-------------- 6intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173983td_character_length(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select td_character_length('1中2文'); td_character_length--------------------- 6intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173984td_day_of_calendar(date)输入日期与'1900-01-01'相差的天数select td_day_of_calendar(date '2021-11-10'); td_day_of_calendar-------------------- 44509intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173986td_day_of_month(date)一个月的第几天select td_day_of_month(date '2021-11-10'); td_day_of_month----------------- 10intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173987td_day_of_month(timestamp without time zone)一个月的第几天select td_day_of_month( '2021-11-10 10:01:01'); td_day_of_month----------------- 10intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173989td_day_of_week(date)一个周的第几天,在td中,周日为1,周六为7select td_day_of_week(date '2021-11-10'); td_day_of_week---------------- 4intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173993td_day_of_week(timestamp without time zone)一个周的第几天,在td中,周日为1,周六为7select td_day_of_week( '2021-11-10 10:01:01'); td_day_of_week---------------- 4intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173994td_day_of_year(date)一个年的第几天select td_day_of_year(date '2021-11-10'); td_day_of_year---------------- 314intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173996td_day_of_year(timestamp without time zone)一个年的第几天select td_day_of_year( '2021-11-10 10:10:10'); td_day_of_year---------------- 314intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=173997td_instr(text,text,integer)返回某个字符的位置,第三个参数是指定搜索位置,类似instr,考虑td与dws字符集影响而新增select td_instr('1中2文','2',1); td_instr---------- 4(1 row)select instr('1中2文','2',1); instr------- 3(1 row)textTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=174000td_left(text,integer)与left类似,考虑td与dws字符集影响而新增,若中间截取了中文,返回固定的\x0F字符select td_left('1中2文',3); td_left--------- 1中select td_left('1中2文',2); td_left--------- 1\x0Fselect left('1中2文',2); left------ 1中textTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=174003td_length(text)返回GBK下的字符的字节长度,与UTF8的长度有差异select td_length('1中2文'); td_length----------- 6(1 row)cmbgdw=> select length('1中2文'); length-------- 4intergerTDplsqlhttps://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=174009td_month_begin(date)获取当天月初日期select td_month_begin(date '2021-11-10'); td_month_begin---------------- 2021-11-01dateTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173937-1-1.htmltd_month_begin(timestamp without time zone) dateTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173939-1-1.htmltd_month_end(date)获取当天月末日期select td_month_end(date '2021-11-10'); td_month_end-------------- 2021-11-30dateTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173941-1-1.htmltd_month_end(timestamp without time zone) dateTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173942-1-1.htmltd_quarter_of_year(date)一个年的第几个季度select td_quarter_of_year(date '2021-10-01') ; td_quarter_of_year-------------------- 4intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173943-1-1.htmltd_regexp_replace(text,text,text)因dws也有regexp_replace,此函数区别区别于dws,因此命名为td_regexp_replace第一个参数:输入的字符串第二个参数:输入的正则表达式第三个参数:匹配后替换的字符select td_regexp_replace('1a2b3c','\d','w'); td_regexp_replace------------------- wawbwctextTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173944-1-1.htmltd_regexp_replace(text,text,text,integer,integer,text)第一个参数:输入的字符串第二个参数:正则表达式第三个参数:匹配到替换的字符第四个参数:搜索起始位置第五个参数:取匹配到的第几个组字符,输入0,则对所有匹配的都做替换,只接受0和1第六个参数:是否区分大小写等,输入i为不区分大小写,c为区分大小写,默认为c函数功能:通过正则表达式替换字符select td_regexp_replace('1a2b3c','\d','w',2,1,'i'); td_regexp_replace------------------- 1awb3c(1 row)cmbgdw=> select td_regexp_replace('1a2b3c','\d','w',2,0,'i'); td_regexp_replace------------------- 1awbwctextTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173945-1-1.htmltd_right(text,integer)与right类似,考虑td与dws字符集影响而新增,若中间截取了中文,返回固定的\x0F字符select right('1中2文',2); right------- 2文(1 row)cmbgdw=> select td_right('1中2文',2); td_right---------- 文textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173946-1-1.htmltd_substr(text,integer)与substr类似,考虑td与dws字符集影响而新增,若中间截取了中文,返回固定的\x0F字符select td_substr('1中2文',4); td_substr----------- 2文textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173954-1-1.htmltd_substr(text,integer,integer)select td_substr('1中2文',1,3); td_substr----------- 1中textTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173959-1-1.htmltrunc(date,character varying)获取某些类型的日期select trunc(date '2021-11-10','iw'); trunc ------------ 2021-11-08dateTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173875-1-1.htmlweeknumber_of_calendar(date)输入日期与'1900-01-01'相差的周数select weeknumber_of_calendar(date '2021-11-10'); weeknumber_of_calendar------------------------ 6358intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173877-1-1.htmlweeknumber_of_year(date)当年的周数,考虑td的一周开始是周日select weeknumber_of_year(date '2021-11-10'); weeknumber_of_year-------------------- 45intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173883-1-1.htmlyearnumber_of_year(date)当年的年数select yearnumber_of_year(date '2021-11-10'); yearnumber_of_year-------------------- 2021intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173887-1-1.htmlzeroifnull(anyelement)如果输入是null值,则返回0select zeroifnull(null); zeroifnull------------ 0cmbgdw=> create temp table mytbl(col int);cmbgdw=> drop table mytbl;DROP TABLEcmbgdw=> create temp table mytbl(col int);NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'col' as the distribution column by default.HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.CREATE TABLEcmbgdw=> insert into mytbl select null;INSERT 0 1cmbgdw=> select zeroifnull(col) from mytbl; zeroifnull------------ 0analyelementTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173891-1-1.htmlzeroifnull(unknown) intergerTDplsqlhttps://bbs.huaweicloud.com/forum/thread-173891-1-1.html
-
我们在处理一些文本的时候需要匹配文本中的一些内容,比如需要提取一些介于两者之间的字符的各种情况1、总计金额¥12.3元2、此次这个指数【出生率】提升,【人口数量】略有上升3、前后括号里的文字《防疫指南》等等。上面这些标黄的内容需要怎样提取了?我们可以搜索到很多的正则表达式网站,如 https://c.runoob.com/front-end/854我们可以使用¥.*?元,可以匹配出我们需要的部分,如下所示。然后再把开头与结尾的字符去掉即可 , (?<=¥).*?(?=元)去掉开头¥字符,使用 (?<=¥)去掉结尾元汉字,使用 (?=元)同样 (?<=【).*?(?=】) 的匹配结果为:(?<=《).*?(?=》) 的匹配结果为: 将以上正则表达式可以直接复制粘贴到regex_findall控件的正则表达式里即可。regex_findallregex_search如果前后删除的符号是引起转义的,需要增加\来处理,如下:111+0.12(+23.0%) 如果提取以+开始 以(结束的正则则需要如下表达式: (?<=\+).*?(?=\()
This is WeAutomate 发表于2021-12-27 15:09:18 2021-12-27 15:09:18 最后回复 We are WeAutomate 2024-08-07 11:25:15
1925 4 -
函数名称:td_regexp_replace(text,text,text,integer,integer,text)函数说明:第一个参数:输入的字符串第二个参数:正则表达式第三个参数:匹配到替换的字符第四个参数:搜索起始位置第五个参数:取匹配到的第几个组字符,输入0,则对所有匹配的都做替换,只接受0和1第六个参数:是否区分大小写等,输入i为不区分大小写,c为区分大小写,默认为c函数功能:通过正则表达式替换字符返回值说明描述:text样例:select td_regexp_replace('1a2b3c','\d','w',2,1,'i'); td_regexp_replace ------------------- 1awb3c(1 row)cmbgdw=> select td_regexp_replace('1a2b3c','\d','w',2,0,'i'); td_regexp_replace ------------------- 1awbwc语言:PLSQL函数定义:CREATE OR REPLACE FUNCTION public.td_regexp_replace(text,text,text,integer,integer,text default 'c'::text) RETURNS text LANGUAGE plpgsql STRICT NOT FENCED SHIPPABLE as $$ DECLARE otext text; begin IF $6 IN ('i','c') and $4 = 1 and $5 = 0 then otext := regexp_replace($1,$2,$3,'g'||$6); ELSIF $6 IN ('i','c') and $4 > 1 and $5 = 0 then otext := td_substr($1,1,$4-1)||regexp_replace(td_substr($1,$4),$2,$3,'g'||$6); ELSIF $6 in ('i','c') and $4 = 1 and $5 = 1 then otext := regexp_replace($1,$2,$3,$6); ELSIF $6 in ('i','c') and $4 > 1 and $5 = 1 then otext := td_substr($1,1,$4-1)||regexp_replace(td_substr($1,$4),$2,$3,$6); ELSIF $4 < 1 THEN raise exception '[9134] The search start position must be greater than 0. which the input is %.',$3; ELSIF $5 not in (1,0) THEN raise exception '[9134] Occurence must be 0 or 1, which the input is %.',$4; ELSE raise exception '[9134] Match option must be ''c'',''i'', which input is %.',$6; END IF; RETURN otext; end; $$ ;
-
函数名称:regexp_substr(text,text,integer,integer,text)函数说明:第一个参数:输入的字符串第二个参数:正则表达式第三个参数:搜索起始位置第四个参数:取匹配到的第几个组字符第五个参数:是否区分大小写等,输入i为不区分大小写,c为区分大小写,默认为c函数功能:通过正则表达式截取字符返回值说明描述:text样例:cmbgdw=> select regexp_substr('1中2文','\d',1,1,'i'); regexp_substr --------------- 1(1 row)cmbgdw=> select regexp_substr('1中2文','\d',1,2,'i'); regexp_substr --------------- 2(1 row)语言:PLSQL函数定义:CREATE OR REPLACE FUNCTION public.regexp_substr(text,text,integer,integer,text default 'c'::text) RETURNS text LANGUAGE plpgsql STRICT NOT FENCED SHIPPABLE as $$ DECLARE otext text; BEGIN IF $5 in ('i','c') AND $4 = 1 and $3 > 0 THEN otext := (regexp_matches(td_substr($1,$3),'('||$2||')','g'||$5))[1] limit 1; ELSIF $3 = 0 THEN raise exception 'The search position must be greater than 0.'; ELSIF $4 > 1 THEN otext := (regexp_matches(td_substr($1,$3),'('||$2||')','g'||$5))[1] limit 1 offset $4 - 1; ELSIF $4 < 1 THEN raise exception 'Occurence must be greater than 0.'; ELSE raise exception '[9134] Match option must be ''c'',''i'', which the input is %.',$5; end if; return otext; end; $$ ;
-
函数名称:regexp_similar(text,text,text)函数说明:第一个参数:输入的字符串第二个参数:正则表达式第三个参数:是否区分大小写等,输入i为不区分大小写,c为区分大小写函数功能:判断输入的字符串是否满足输入的正则表达式返回值说明描述:interger样例:select regexp_similar('12345678902','\d+','c'); regexp_similar ---------------- 1(1 row)cmbgdw=> select regexp_similar('1234567890w','\d+','c'); regexp_similar ---------------- 0select regexp_similar('1234567890W','\d+[a-z]','c'); regexp_similar ---------------- 0(1 row)cmbgdw=> select regexp_similar('1234567890W','\d+[a-z]','i'); regexp_similar ---------------- 1语言:PLSQL函数定义:CREATE OR REPLACE FUNCTION public.regexp_similar(text,text,text default 'c'::text) RETURNS integer LANGUAGE plpgsql STRICT NOT FENCED SHIPPABLE as $$ begin IF $3 in ('i','c') THEN RETURN case when regexp_like($1,'^'||$2||'$',$3) = 't' then 1 else 0 end; ELSE raise exception '[9134] Match option must be ''c'',''i'',which the input is %',$3; END IF; END; $$ ;
-
函数名称:regexp_instr(text,text,integer)函数说明:第一个参数:输入的字符串第二个参数:正则表达式第三个参数:匹配的起始位置通过正则表达式搜索字符位置,需考虑中文字符返回值说明描述:interger样例:select regexp_instr('中1文2','\d',1); regexp_instr -------------- 3语言:PLSQL函数定义:CREATE OR REPLACE FUNCTION public.regexp_instr(text,text) RETURNS integer LANGUAGE plpgsql STRICT NOT FENCED SHIPPABLE as $$ BEGIN IF regexp_substr($1,$2) is null then return 0; else return case when (td_instr($1,regexp_substr($1,$2),0))::int is null then 0 else (td_instr($1,regexp_substr($1,$2),0))::int end; end if; end; $$ ; CREATE OR REPLACE FUNCTION public.regexp_instr(text,text,integer) RETURNS integer LANGUAGE plpgsql STRICT NOT FENCED SHIPPABLE as $$ BEGIN IF regexp_substr(td_substr($1,$3),$2) is null then return 0; ELSIF $3 >= 1 THEN return case when (td_instr($1,regexp_substr($1,$2),0))::int is null then 0 else (td_instr($1,regexp_substr($1,$2),0))::int end; end if; end; $$ ;
-
函数名称:regexp_instr(text,text,integer)函数说明:第一个参数:输入的字符串第二个参数:正则表达式第三个参数:匹配的起始位置通过正则表达式搜索字符位置,需考虑中文字符返回值说明描述:interger样例:select regexp_instr('中1文2','\d',1); regexp_instr -------------- 3语言:PLSQL函数定义:CREATE OR REPLACE FUNCTION public.regexp_instr(text,text) RETURNS integer LANGUAGE plpgsql STRICT NOT FENCED SHIPPABLE as $$ BEGIN IF regexp_substr($1,$2) is null then return 0; else return case when (td_instr($1,regexp_substr($1,$2),0))::int is null then 0 else (td_instr($1,regexp_substr($1,$2),0))::int end; end if; end; $$ ; CREATE OR REPLACE FUNCTION public.regexp_instr(text,text,integer) RETURNS integer LANGUAGE plpgsql STRICT NOT FENCED SHIPPABLE as $$ BEGIN IF regexp_substr(td_substr($1,$3),$2) is null then return 0; ELSIF $3 >= 1 THEN return case when (td_instr($1,regexp_substr($1,$2),0))::int is null then 0 else (td_instr($1,regexp_substr($1,$2),0))::int end; end if; end; $$ ;
-
此时matches和equals显示的结果相同,返回值都为true,但实际上matches的功能更为强大,可以匹配符合一个模式的字符串集。如: System.out.println("Java is cool".matches("Java.*"));显示的结果同样为true,Java.*为正则表达式。下面将简要介绍正则表达式的功能。1.matches(“x”),匹配的是指定的字符x;System.out.println("Java".matches("B")); 输出falseSystem.out.println("Java".matches("J")); 输出true2.matches("."),匹配的是任意单个字符(换行符除外);System.out.println("Java".matches("J..a")); 输出trueSystem.out.println("Javb".matches("J..a")); 输出false3.matches(“(ab|cd)”),匹配的是ab或者cd;System.out.println("ef".matches("ab|cd")); 输出falseSystem.out.println("ab".matches("ab|cd")); 输出trueSystem.out.println("cd".matches("ab|cd")); 输出true4.matches("[abc]"),匹配的是a或者b或者c;System.out.println("Java".matches("Ja[uxve]a")); 输出true System.out.println("Java".matches("Ja[uxwe]a")); 输出false5.matches("[^abc]"),匹配的是除了a或者b或者c以外的任何字符;System.out.println("Java".matches("Ja[^uxwe]a")); 输出trueSystem.out.println("Java".matches("Ja[^uxve]a")); 输出false6.matches("[a-z]"),匹配的是a到z;System.out.println("Java".matches("Ja[u-z]a")); 输出trueSystem.out.println("Java".matches("Ja[a-f]a")); 输出false7.matches("[^a-z]"),匹配的是a到z以外的任意字符;System.out.println("Java".matches("Ja[^a-f]a")); 输出trueSystem.out.println("Java".matches("Ja[^u-z]a")); 输出false8..matches("[a-e[m-p]]"),匹配的是a到e或者m到p;System.out.println("Java".matches("Ja[u-z[a-d]]a")); 输出trueSystem.out.println("Java".matches("Ja[h-m[a-d]]a")); 输出false9.matches("[a-e&&[c-p]]"),匹配的是a到e和c到p的交集;System.out.println("Java".matches("Ja[h-m[h-l]]a")); 输出falseSystem.out.println("Java".matches("Ja[a-x[u-x]]a")); 输出true10.matches("\\d"),匹配的是一位数字(等同于[0~9]);System.out.println("Java2".matches("Java(\\d)")); 输出trueSystem.out.println("Javaa".matches("Java(\\d)")); 输出false11.matches("\\D"),匹配的是一位非数字;System.out.println("Javaa".matches("Java(\\D)")); 输出trueSystem.out.println("Java2".matches("Java(\\D)")); 输出false12.matches("\\w"),匹配的是单词字符(单词字符是所有的字母,数字和下划线字符);System.out.println("Javaa".matches("Java(\\w)")); 输出trueSystem.out.println("Java$".matches("Java(\\w)")); 输出false13.matches("\\W"),匹配的是非单词字符;System.out.println("Java$".matches("Java(\\W)")); 输出trueSystem.out.println("Java2".matches("Java(\\W)")); 输出false14.matches("\\s"),匹配的是空白字符;System.out.println("Java ".matches("Java(\\s)")); 输出trueSystem.out.println("Javaa".matches("Java(\\s)")); 输出false15.matches("\\S"),匹配的是非空白字符;System.out.println("Javaa".matches("Java(\\S)")); 输出trueSystem.out.println("Java ".matches("Java(\\S)")); 输出false 16.matches("p*"),匹配的是0或者多次出现模式p;System.out.println("abab".matches("(ab)*")); 输出trueSystem.out.println("aaaa".matches("(ab)*")); 输出false17.matches("p+"),匹配的是1次或者多次出现模式p;System.out.println("able".matches("(ab)+.*")); 输出trueSystem.out.println("a".matches("a+b*")); 输出trueSystem.out.println("c".matches("a+b*")); 输出false18.matches("p?"),匹配的是0或者1次出现模式p;System.out.println("Java".matches("J?Java")); 输出trueSystem.out.println("ava".matches("J?ava")); 输出trueSystem.out.println("Java".matches("J?Mava")); 输出false19.matches("p{n}"),匹配的是正好出现n次模式p;System.out.println("Java".matches("Ja{1}.*")); 输出trueSystem.out.println("Java".matches(".{2}")); 输出false20.matches("p{n,}"),匹配的是至少出现n次模式p;System.out.println("aaaa".matches("a{1,}")); 输出trueSystem.out.println("aaaa".matches("a{5,}")); 输出false21.matches("p{n,m}"),匹配的是出现n到m次(两侧都包含)模式p;System.out.println("aaaa".matches("a{1,4}")); 输出trueSystem.out.println("aaaa".matches("a{6,8}")); 输出false22.matches("\p{P}"),匹配的是一个标点字符;System.out.println("J?a".matches("J\\p{P}a")); 输出trueSystem.out.println("Jaa".matches("J\\p{P}a")); 输出false===================================================="*"等同于{0,},"+"等同于{1,},"?"等同于"{0,1}。其中*,?,{n},{n,},{n,m},+被称为量词符,要注意不要在重复量词符中使用空白。替换和拆分字符串replaceFirst的作用是替换匹配到的第一个字符串System.out.println("Java Java Java".replaceFirst("v\\w","wi")); 输出Jawi Java JavareplaceAll的作用是替换匹配到的所有字符串System.out.println("Java Java Java".replaceAll("v\\w","wi")); 输出Jawi Jawi Jawi拆分split(regex)方法使用使用匹配的分隔符将一个字符串分割成子字符串。split(regex,limit)方法,limit参数确定模式匹配多少次。如果limit<=0,则此方法等同于第一种方法,反之,则最多匹配limit-1次。注意:默认情况下,量词符都是尽可能多次地进行匹配。例如:System.out.println("Jaaavaa".replaceFirst("a+", "R")); 输出JRvaa可以通过在后面加"?"的方法来减少匹配的次数。例如:System.out.println("Jaaavaa".replaceFirst("a+?", "R"));此时就会输出JRaavaa
-
正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。搜索模式可用于文本搜索和文本替换。什么是正则表达式?正则表达式是由一个字符序列形成的搜索模式。当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。正则表达式可以是一个简单的字符,或一个更复杂的模式。正则表达式可用于所有文本搜索和文本替换的操作。语法/正则表达式主体/修饰符(可选)其中修饰符是可选的。实例:var patt = /runoob/i实例解析:/runoob/i 是一个正则表达式。runoob 是一个正则表达式主体 (用于检索)。i 是一个修饰符 (搜索不区分大小写)。使用字符串方法在 JavaScript 中,正则表达式通常用于两个字符串方法 : search() 和 replace()。search() 方法 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。replace() 方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。search() 方法使用正则表达式实例使用正则表达式搜索 "Runoob" 字符串,且不区分大小写:var str = "Visit Runoob!"; var n = str.search(/Runoob/i);输出结果为:6search() 方法使用字符串search 方法可使用字符串作为参数。字符串参数会转换为正则表达式:实例检索字符串中 "Runoob" 的子串:var str = "Visit Runoob!"; var n = str.search("Runoob");replace() 方法使用正则表达式实例使用正则表达式且不区分大小写将字符串中的 Microsoft 替换为 Runoob :var str = document.getElementById("demo").innerHTML; var txt = str.replace(/microsoft/i,"Runoob");结果输出为:replace() 方法使用字符串replace() 方法将接收字符串作为参数:var str = document.getElementById("demo").innerHTML; var txt = str.replace("Microsoft","Runoob");
上滑加载中
推荐直播
-
GaussDB管理平台TPOPS,DBA高效运维的一站式解决方案
2024/12/24 周二 16:30-18:00
Leo 华为云数据库DTSE技术布道师
数据库的复杂运维,是否让你感到头疼不已?今天,华为云GaussDB管理平台将彻底来改观!本期直播,我们将深入探索GaussDB管理平台的TPOPS功能,带你感受一键式部署安装的便捷,和智能化运维管理的高效,让复杂的运维、管理变得简单,让简单变得可靠。
回顾中 -
DTT年度收官盛典:华为开发者空间大咖汇,共探云端开发创新
2025/01/08 周三 16:30-18:00
Yawei 华为云开发工具和效率首席专家 Edwin 华为开发者空间产品总监
数字化转型进程持续加速,驱动着技术革新发展,华为开发者空间如何巧妙整合鸿蒙、昇腾、鲲鹏等核心资源,打破平台间的壁垒,实现跨平台协同?在科技迅猛发展的今天,开发者们如何迅速把握机遇,实现高效、创新的技术突破?DTT 年度收官盛典,将与大家共同探索华为开发者空间的创新奥秘。
回顾中
热门标签