如何切割长度未知的字符串的左侧部分? (带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函数)的主要内容,如果未能解决你的问题,请参考以下文章

Vue2 带纵向合并的原生表格实现切割侧栏分页

JS javascript如何按照一定长度切割字符串。

A == B ?(hdu2054)

如何读取长度未知的输入字符串?

SQL语句如何查询ACCESS数据库中某一字符串字段长度等于某个值的所有记录?

无法在Fortran中读取未知长度字符串的实数