如何切割长度未知的字符串的左侧部分? (带sql函数)
Posted
技术标签:
【中文标题】如何切割长度未知的字符串的左侧部分? (带sql函数)【英文标题】:How can i cut the left part of the string with unknown legth? (with sql function) 【发布时间】:2019-10-03 09:43:40 【问题描述】:在 ETL 过程中,我收到一个 varchar 字段,并且(值的)长度逐行更改。 我需要从字符串的右侧保留 5 个符号。 这意味着我需要切割左侧,但由于长度未知,我不能。
我试过select substring('24:15:11',4, 5)
,但它对我没有帮助,字符串可能是'2019-05-01 22:15:11'
。
sql:
select substring('24:15:11',4, 5)
预期:
15:11
【问题讨论】:
嗨!您是否尝试过功能 RIGHT() ?不确定它是否存在于您的确切风格的 sql 中,但我一直在 sql server 中使用它。 @DavidSöderlund presto 中有 right() 函数吗?我不这么认为。 @DavidSöderlund - 似乎没有RIGHT
函数 (prestodb.github.io/docs/current/functions/string),因此是 SUBSTRING
。
我认为您的时间段将总是相同的长度(即正确地用前导零填充 (00:00:00)?
【参考方案1】:
您可以使用 length() 来确定 substr() 的第二个参数:
select substr('24:15:11', length('24:15:11') - 4, 5)
或者简单地说:
select substr('24:15:11', length('24:15:11') - 4)
了解 preosto 的 string functions。
【讨论】:
酷谢谢!不知道我可以使用负索引 @Terpsihora - 他不是,真的,他从长度中扣除。第二个版本将长度 - 4 带到字符串的末尾(即没有为字符数指定参数,因此假定为 EoS)。 好吧,substr
的链接文档说 负的起始位置被解释为相对于字符串的结尾。 - 那么使用 length
的意义何在?【参考方案2】:
您可以使用substr
。负的起始位置被解释为相对于字符串的结尾。
select substr('24:15:11', -5)
【讨论】:
酷谢谢!不知道我可以使用负索引 @Paul ,问题中的预期结果是分钟和秒(最后五个符号)。以上是关于如何切割长度未知的字符串的左侧部分? (带sql函数)的主要内容,如果未能解决你的问题,请参考以下文章