在Oracle中显示字符串的前三百(300)个单词?

时间:2016-01-03 16:33:44

标签: sql string oracle plsql

我要求在Oracle中显示字符串的前300个单词(不是字母)。请注意,字符串列可以少于或多于300个单词。请帮忙。

3 个答案:

答案 0 :(得分:4)

您可以使用正则表达式执行此操作。像这样:

select regexp_substr(col, '^([^ ] +){300}$')

确切的定义取决于你的意思"字"。

答案 1 :(得分:1)

假设一个单词由字母数字字符,连字符和撇号组成,那么你可以这样做:

Oracle安装程序

CREATE TABLE SENTENCES ( SENTENCE ) AS
SELECT 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras gravida mattis dignissim. Aliquam a neque imperdiet, faucibus ex vel, fringilla nulla. Etiam eu diam sed enim dapibus bibendum. Cras faucibus molestie dignissim. Sed nec ligula mollis mauris pellentesque porttitor. Sed eget convallis odio. Vestibulum maximus justo nec ante accumsan, a placerat augue aliquet.

In rhoncus quis lacus eu fermentum. Etiam pretium commodo porttitor. Maecenas tristique lobortis odio, in fermentum est iaculis nec. Fusce rutrum malesuada lacus, eget accumsan quam malesuada quis. Mauris tempor turpis nec felis cursus convallis. Aliquam ac blandit arcu. Fusce dapibus elementum enim, auctor mattis justo iaculis ut. Etiam sit amet elit lobortis, eleifend quam sed, ultricies nisi. Etiam sit amet risus quam. Ut euismod, dui sed cursus pharetra, turpis leo egestas quam, non pharetra urna ipsum ac augue. Nulla quis tempor ante, in egestas sem. Nunc orci ex, sodales in ultrices in, scelerisque et massa.

Aenean massa felis, molestie eu varius sed, accumsan ut neque. Proin laoreet, quam sit amet aliquam lacinia, tortor leo venenatis velit, quis vestibulum neque enim eu augue. Mauris elementum augue eget velit iaculis mattis tempor et ante. Praesent nec felis eu dolor hendrerit finibus eu sit amet nulla. Integer ultricies justo vel placerat molestie. Etiam hendrerit, augue vel aliquet porttitor, erat est gravida nisl, sed malesuada mauris mauris eget lorem. Fusce in placerat quam. Praesent ante urna, rutrum nec ante eu, viverra hendrerit ex. Mauris finibus, dolor pharetra laoreet commodo, erat arcu lacinia mauris, sed bibendum magna mi id felis. Aenean eget sagittis arcu. Quisque scelerisque ipsum sem, vel blandit quam sodales nec. Curabitur varius erat dui, eget accumsan nisl aliquam a. Sed vehicula mollis arcu sed sodales.

Duis bibendum arcu eu est ornare auctor. Sed sed massa ultrices, vestibulum arcu id, porttitor ex. Praesent dignissim arcu mauris, id condimentum ex mollis vel. Duis tincidunt, eros vel molestie semper, dolor orci suscipit turpis, at aliquam urna nunc in leo. Quisque faucibus tortor pulvinar nibh tristique malesuada. Proin aliquet lectus et velit molestie cursus. Curabitur tincidunt ante nec pulvinar semper. Aliquam finibus finibus rutrum. Nullam vel molestie nisi. In varius tortor id neque bibendum tincidunt convallis eget metus. In pellentesque condimentum facilisis. Proin sit amet libero mi. Sed mollis sit amet est eu vehicula. In risus ante, mollis facilisis tortor a, luctus porta nisi. Interdum et malesuada fames ac ante ipsum primis in faucibus. Maecenas ipsum nisl, auctor eu mauris vel, imperdiet condimentum justo.

Nam eu faucibus urna. Sed vitae mi ac mauris faucibus posuere. Donec aliquam dignissim lacus, quis ullamcorper metus suscipit eget. Nam vitae dignissim erat, a ultricies sapien. Aenean viverra vel velit ac facilisis. Vestibulum pretium orci consectetur, tincidunt nunc a, imperdiet ligula. Proin vitae tellus sit amet eros condimentum porta. Donec sed lectus vehicula, varius nulla at, varius lorem.

In sodales pulvinar ante, et mattis libero pellentesque in. Cras scelerisque hendrerit imperdiet. Nam feugiat dolor eget tempor congue. Etiam nisl neque, lobortis vel tristique interdum, euismod et velit. Mauris consequat nunc velit, non placerat ligula pharetra sed. Donec interdum rutrum facilisis. Etiam vel est diam. Vestibulum porta, sem et consectetur vulputate, augue nulla imperdiet erat, vitae ornare lorem dui sit amet erat. Ut rhoncus nibh vel tortor placerat, vitae posuere lorem dapibus. Praesent pulvinar lorem ut ante tincidunt iaculis. Etiam non metus vel tellus viverra molestie eu in dolor. Aenean ut finibus turpis. Mauris quis ante dignissim, viverra nulla in, fermentum purus.

Donec porta pulvinar purus ac tincidunt. Etiam ut ullamcorper felis. Nulla quis nulla arcu. Morbi accumsan lacus ut est congue, vel aliquet metus lobortis. Mauris mollis dolor eget suscipit efficitur.' FROM DUAL;

查询1

SELECT REGEXP_REPLACE( Sentence, '^((.*?[A-Za-z0-9-'']+){0,300}).*$', '\1', 1, 1, 'n')
FROM   Sentences

<强>结果

REGEXP_REPLACE(SENTENCE,'^((.*?[A-ZA-Z0-9-'']+){0,300}).*$','\1',1,1,'N')                                        
-------------------------------------------------------------------------
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras gravida mattis dignissim. Aliquam a neque imperdiet, faucibus ex vel, fringilla nulla. Etiam eu diam sed enim dapibus bibendum. Cras faucibus molestie dignissim. Sed nec ligula mollis mauris pellentesque porttitor. Sed eget convallis odio. Vestibulum maximus justo nec ante accumsan, a placerat augue aliquet.                                                                   

In rhoncus quis lacus eu fermentum. Etiam pretium commodo porttitor. Maecenas tristique lobortis odio, in fermentum est iaculis nec. Fusce rutrum malesuada lacus, eget accumsan quam malesuada quis. Mauris tempor turpis nec felis cursus convallis. Aliquam ac blandit arcu. Fusce dapibus elementum enim, auctor mattis justo iaculis ut. Etiam sit amet elit lobortis, eleifend quam sed, ultricies nisi. Etiam sit amet risus quam. Ut euismod, dui sed cursus pharetra, turpis leo egestas quam, non pharetra urna ipsum ac augue. Nulla quis tempor ante, in egestas sem. Nunc orci ex, sodales in ultrices in, scelerisque et massa.

Aenean massa felis, molestie eu varius sed, accumsan ut neque. Proin laoreet, quam sit amet aliquam lacinia, tortor leo venenatis velit, quis vestibulum neque enim eu augue. Mauris elementum augue eget velit iaculis mattis tempor et ante. Praesent nec felis eu dolor hendrerit finibus eu sit amet nulla. Integer ultricies justo vel placerat molestie. Etiam hendrerit, augue vel aliquet porttitor, erat est gravida nisl, sed malesuada mauris mauris eget lorem. Fusce in placerat quam. Praesent ante urna, rutrum nec ante eu, viverra hendrerit ex. Mauris finibus, dolor pharetra laoreet commodo, erat arcu lacinia mauris, sed bibendum magna mi id felis. Aenean eget sagittis arcu. Quisque scelerisque ipsum sem, vel blandit quam sodales nec. Curabitur varius erat dui, eget accumsan nisl aliquam a. Sed vehicula mollis arcu sed sodales.                                                                   

Duis bibendum arcu eu est ornare auctor. Sed sed massa ultrices, vestibulum arcu id, porttitor ex. Praesent dignissim arcu mauris, id condimentum ex

答案 2 :(得分:0)

使用函数instr。其第4个参数表示符号的出现。 instr(my_string, ' ', 1, 300)返回字符串my_string中第300个空格符号的位置。您可以在函数substr中使用此函数的结果:

substr(my_string, 1, instr(my_string, ' ', 1, 300))

如果string包含少于300个空格符号,则函数instr返回0,请注意这一点。