如何从SQL中的列值中提取特定部分(Redshift平台)

时间:2018-03-01 06:28:24

标签: sql select amazon-redshift

我在NAME列中有值:

PROD_UPI_FIIT_20180101_121017.TXT
REG_ART_TQ_FIIT_20180203_091215.TXT
STORES_OR_NIIT_20180809_121709.TXT
TIRES_UI_PO_NIIT_20180104_070901.TXT

我必须编写一个查询,以便我可以看到3列中的值,如下所示:

PROD_UPI_FIIT       20180101      121017
REG_ART_TQ_FIIT     20180203      091215
STORES_OR_NIIT      20180809      121709
TIRES_UI_PO_NIIT    20180104      070901

我使用的是Redshift数据库。

1 个答案:

答案 0 :(得分:0)

我不是REDSHIFT用户,但您应该可以使用SPLIT_PART()函数或POSITION(),SUBSTRING()和REVERSE()的组合来完成它。

SELECT split_part(text, '_', 1) + '_' 
       + split_part(text, '_', 2) + '_'
       + split_part(text, '_', 3) as field1,
       split_part(text, '_', 4) as field2,
       split_part(text, '_', 5) as field3
FROM your_table;

我在这个例子中使用过T-SQL,但REDSHIFT使用相同的函数,我假设日期长度= 8,时间长度= 6。

declare @text varchar(100) = 'PROD_UPI_FIIT_20180101_121017.TXT';

select substring(@text, 0, len(@text) - 19) name,
       substring(@text, len(@text) - 18, 8) date,
       substring(@text, len(@text) - 9, 6) time
GO
name          | date     | time  
:------------ | :------- | :-----
PROD_UPI_FIIT | 20180101 | 121017

dbfiddle here