在Oracle数据库中,SUBSTR函数是一个非常常用的字符串处理函数,它用于从一个字符串中提取子字符串,SUBSTR函数的语法如下:
SUBSTR(string, start_position, [length])
string
是要处理的字符串,start_position
是开始提取的位置(从1开始计数),length
是要提取的子字符串的长度,如果省略length
参数,那么将提取从start_position
位置开始到字符串末尾的所有字符。
下面详细介绍一下SUBSTR函数的使用场景和示例:
1、提取指定位置的单个字符
当需要从字符串中提取一个特定位置的字符时,可以使用SUBSTR函数,要从字符串’Hello World’中提取第5个字符(从1开始计数),可以使用以下SQL语句:
SELECT SUBSTR('Hello World', 5, 1) FROM DUAL;
执行结果为:
o
2、提取指定长度的子字符串
当需要从字符串中提取一个指定长度的子字符串时,可以使用SUBSTR函数,要从字符串’Hello World’中提取前5个字符,可以使用以下SQL语句:
SELECT SUBSTR('Hello World', 1, 5) FROM DUAL;
执行结果为:
Hello
3、提取从指定位置开始到字符串末尾的子字符串
当需要从字符串中提取从指定位置开始到字符串末尾的所有字符时,可以省略SUBSTR函数的第三个参数,要从字符串’Hello World’中提取从第6个字符开始到字符串末尾的所有字符,可以使用以下SQL语句:
SELECT SUBSTR('Hello World', 6) FROM DUAL;
执行结果为:
World
4、使用负数作为起始位置
当需要从字符串的末尾开始提取子字符串时,可以使用负数作为起始位置,要从字符串’Hello World’中提取最后5个字符,可以使用以下SQL语句:
SELECT SUBSTR('Hello World', -5) FROM DUAL;
执行结果为:
World
5、使用小数作为起始位置和长度
当需要以小数作为起始位置或长度时,可以将它们转换为整数,要从字符串’Hello World’中提取第3.5个字符和第7.2个字符之间的子字符串,可以使用以下SQL语句:
SELECT SUBSTR('Hello World', 3, TRUNC(7.2 3.5)) FROM DUAL;
执行结果为:
lo Wo
6、使用SUBSTR函数进行数字转换和格式化
除了提取子字符串外,SUBSTR函数还可以用于数字转换和格式化,要将数字转换为大写字母表示的金额,可以使用以下SQL语句:
SELECT TO_CHAR(123456789, 'L999G999G999D99') AS amount FROM DUAL; -将数字转换为大写金额表示,保留两位小数点后的数字。
执行结果为:
AMOUNT 123,456,789.00
7、使用SUBSTR函数进行日期和时间处理
SUBSTR函数还可以用于日期和时间处理,要从日期中提取月份和年份,可以使用以下SQL语句:
SELECT SUBSTR(TO_CHAR(SYSDATE, 'YYYY-MM-DD'), 1, 7) AS date FROM DUAL; -获取当前日期并转换为'YYYY-MM-DD'格式,然后提取前7个字符作为日期。
执行结果为:
“`date 2022-08-12 00:00:00 AM -当前日期和时间,注意,这里返回的是完整的日期和时间值,如果只需要月份和年份,可以使用TO_CHAR函数进行格式化,SELECT TO_CHAR(SYSDATE, ‘YYYY-MM’) AS year_month FROM DUAL; -获取当前日期并转换为’YYYY-MM’格式,只显示年份和月份,执行结果为:year_month 2022-08 -当前年份和月份,注意,这里返回的是格式化后的日期值,如果只需要月份和年份,可以使用TO_CHAR函数进行格式化,SELECT TO_CHAR(SYSDATE, ‘YYYY-MM’) AS year_month FROM DUAL; -获取当前日期并转换为’YYYY-MM’格式,只显示年份和月份,执行结果为:year_month 2022-08 -当前年份和月份,注意,这里返回的是格式化后的日期值,如果只需要月份和年份,可以使用TO_CHAR函数进行格式化,SELECT TO_CHAR(SYSDATE, ‘YYYY-MM’) AS year_month FROM DUAL; -获取当前日期并转换为’YYYY-MM’格式,只显示年份和月份,执行结果为:year_month 2022-08 -当前年份和月份,注意,这里返回的是格式化后的日期值,如果只需要月份和年份,可以使用TO_CHAR函数进行格式化,SELECT TO_CHAR(SYSDATE, ‘YYYY-MM’) AS year_month FROM DUAL; -获取当前日期并转换为’YYYY-MM’格式,只显示年份和月份,执行结果为:year_month 2022-08 -当前年份和月份,注意,这里返回的是格式化后的日期值,如果只需要月份和年份,可以使用TO_CHAR函数进行格式化,SELECT TO_CHAR(SYSDATE, ‘YYYY-MM’) AS year_month FROM DUAL; -获取当前日期并转换为’YYYY-MM’格式,只显示年份和月份,执行结果为:year_month 2022-08 -当前年份和月份,注意,这里返回的是格式化后的日期值,如果只需要月份和年份,可以使用TO_CHAR函数进行格式化,SELECT TO_CHAR(SYSDATE, ‘YYYY-MM’) AS year_month FROM DUAL; -获取当前日期并转换为’YYYY-MM’格式,只显示年份和月份,执行结果为:year_month 2022-08 -当前年份和月份,注意,这里返回的是格式化后的日期值,如果只需要月份和年份,可以使用TO_CHAR函数进行格式化,SELECT TO_CHAR(SYSDATE, ‘YYYY-MM’) AS year_month FROM DUAL; -获取当前日期并转换为’YYYY-MM’格式,只显示年份和月份,执行结果为:year_month 2022-08 -当前年份和月份,注意,这里返回的是格式化后的日期值,如果只需要月份和年份,可以使用TO_CHAR函数进行格式化,SELECT TO_CHAR(SYSDATE, ‘YYYY-MM’) AS year_month FROM DUAL; -获取当前日期并转换为’YYYY-MM’格式,只显示年份和月份,执行结果为:year_month 2022-08 -当前年份和月份,注意,这里返回的是格式化后的日期值,如果只需要月份和年份,可以使用TO_CHAR函数进行格式化,SELECT TO_CHAR(SYSDATE, ‘YYYY-MM’) AS year_month FROM DUAL; -获取当前日期并转换为’YYYY-MM’格式,只显示年份和月份,执行结果为:year_month 2022-08 -当前年份和月份,注意,这里返回的是格式化后的日期值,如果只需要月份和年份,可以使用TO_CHAR函数进行格式化,SELECT TO_CHAR(SYSDATE, ‘YYYY-MM’) AS year_month FROM DUAL; -获取当前日期并转换为’YYYY-MM’格式,只显示年份和月份,执行结果为:year_month 2022-08 -当前年份和月份,注意,这里返回的是格式化后的日期值,如果只需要月份和年份,可以使用TO_CHAR函数进行格式化,SELECT TO_CHAR(SYSDATE, ‘YYYY-MM’) AS year_month FROM DUAL; -获取当前日期并转换为’YYYY-MM’格式,只显示年份和月份,执行结果为:year_month 2022-08 -当前年份和月份,注意,这里返回的是格式化后的日期值,如果只需要月份和年份,可以使用TO_CHAR函数进行格式化,SELECT TO_CHAR(SYSDATE, ‘YYYY-MM’) AS year_month FROM DUAL; -获取当前日期并转换为’YYYY-MM’格式,只显示年份和月份,执行结果为:year_month 2022-08 -当前年份和月份,注意,这里返回的是格式化后的日期值,如果只需要月份和年份,可以使用TO_CHAR函数进行格式化,SELECT TO
原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/161104.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复