sql - 如何从文本字符串中获取日期?
问题描述
我使用 Vertical SQL 并有一个字段“Note”,它是一个自由文本字段(输入数据的方式不一致)。我想创建另一个只有日期的字段或提取字段中的最后一个日期。例如
- “1st order on 3/2/21, second 5/5/21” -> “3/2/21 5/5/21” 或 “5/5/21”
- “第一次交货 2/2/21 第二次交货 8/30/21”->“2/2/21 8/30/21”或“8/30/21”
- “第 1 次报告:2/2/21。” ->“2/2/21”
谢谢!
解决方案
您可以使用REGEXP_SUBSTR()
抓取模式:一位或多位数字;削减; 一位或多位数字;削减; 一位或多位数字。
如果您有多个这些模式,则为找到的每个模式创建一行作为输出。为此,CROSS JOIN
使用一系列连续的整数,您可以输出模式的第 n 次出现。然后,将找到的字符串转换为 DATE。
最后,并且仅当您只需要最后一个日期时,应用 Vertica-peculiar分析限制子句,仅输出结果表i
的相应id
(我必须添加)的最大值。
WITH
-- need a sequence of integers ...
i(i) AS (
SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
)
,
indata(id,s) AS (
SELECT 1,'1st order on 3/2/21, second 5/5/21'
UNION ALL SELECT 2,'first delivery 2/2/21 second one 8/30/21'
UNION ALL SELECT 3,'reported 1st: 2/2/21.'
)
SELECT
id
, i
, s
, REGEXP_SUBSTR(s,'\d+/\d+/\d+',1,i) AS found_token
, REGEXP_SUBSTR(s,'\d+/\d+/\d+',1,i)::DATE AS found_date
FROM indata CROSS JOIN i
WHERE REGEXP_SUBSTR(s,'(\d+/\d+/\d+)',1,i,'',1) <>''
-- remove the following line if you want all dates from all strings
-- and keep it if you only want the last date in the string
LIMIT 1 OVER(PARTITION BY id ORDER BY i DESC)
;
id | i | s | found_token | found_date
----+---+------------------------------------------+-------------+------------
1 | 2 | 1st order on 3/2/21, second 5/5/21 | 5/5/21 | 2021-05-05
2 | 2 | first delivery 2/2/21 second one 8/30/21 | 8/30/21 | 2021-08-30
3 | 1 | reported 1st: 2/2/21. | 2/2/21 | 2021-02-02
推荐阅读
- java - 如果字符串存在,如何根据字符串数组在字符串中添加空格
- getter - How to access variables from another class using getter
- spring-boot - Springboot Webflux jackson deserialization not working
- php - 如何使用 .htaccess rewrite 彻底重写 URL
- python - add a button directly to a resizable picture(i.e ontop) without using canvas
- javascript - Regex with lowercase, uppercase, alphanumeric, special characters and no more than 2 identical characters in a row with a minimum length of 8 chars
- google-web-designer - GWD Custom component
- javascript - 如何使用 Vue.js 在鼠标悬停时更改单个列表对象的 html 内容(Font-Awesome Icon)
- php - Apple APNS - Uncaught Exception: Curl failed: No URL set
- opencv - Can we use CPU instead of GPU to train custome YOLO model for object detection